mirror of https://github.com/nucypher/nucypher.git
First semblance of Twisted TLS upgrade.
parent
2d321f230d
commit
bd599a8b67
|
@ -0,0 +1,33 @@
|
||||||
|
from twisted.python.filepath import FilePath
|
||||||
|
from twisted.internet.endpoints import SSL4ClientEndpoint
|
||||||
|
from twisted.internet.ssl import (
|
||||||
|
PrivateCertificate, Certificate, optionsForClientTLS)
|
||||||
|
from twisted.internet.defer import Deferred, inlineCallbacks
|
||||||
|
from twisted.internet.task import react
|
||||||
|
from twisted.internet.protocol import Protocol, Factory
|
||||||
|
|
||||||
|
from nkms.network import generate_certs
|
||||||
|
|
||||||
|
|
||||||
|
class SendAnyData(Protocol):
|
||||||
|
def connectionMade(self):
|
||||||
|
self.deferred = Deferred()
|
||||||
|
self.transport.write(b"HELLO\r\n")
|
||||||
|
def connectionLost(self, reason):
|
||||||
|
self.deferred.callback(None)
|
||||||
|
|
||||||
|
|
||||||
|
@inlineCallbacks
|
||||||
|
def main(reactor):
|
||||||
|
pem = generate_certs.and_generate()
|
||||||
|
caPem = FilePath(b"ca-private-cert.pem").getContent()
|
||||||
|
clientEndpoint = SSL4ClientEndpoint(
|
||||||
|
reactor, u"localhost", 4321,
|
||||||
|
optionsForClientTLS(u"the-authority", Certificate.loadPEM(caPem),
|
||||||
|
PrivateCertificate.loadPEM(pem)),
|
||||||
|
)
|
||||||
|
proto = yield clientEndpoint.connect(Factory.forProtocol(SendAnyData))
|
||||||
|
yield proto.deferred
|
||||||
|
|
||||||
|
what_happened = react(main)
|
||||||
|
print(what_happened)
|
|
@ -0,0 +1,29 @@
|
||||||
|
from twisted.python.filepath import FilePath
|
||||||
|
from twisted.internet.ssl import PrivateCertificate, KeyPair, DN
|
||||||
|
|
||||||
|
|
||||||
|
def getCAPrivateCert():
|
||||||
|
privatePath = FilePath(b"ca-private-cert.pem")
|
||||||
|
if privatePath.exists():
|
||||||
|
return PrivateCertificate.loadPEM(privatePath.getContent())
|
||||||
|
else:
|
||||||
|
caKey = KeyPair.generate(size=4096)
|
||||||
|
caCert = caKey.selfSignedCert(1, CN="the-authority")
|
||||||
|
privatePath.setContent(caCert.dumpPEM())
|
||||||
|
return caCert
|
||||||
|
|
||||||
|
|
||||||
|
def clientCertFor(name):
|
||||||
|
signingCert = getCAPrivateCert()
|
||||||
|
clientKey = KeyPair.generate(size=4096)
|
||||||
|
csr = clientKey.requestObject(DN(CN=name), "sha1")
|
||||||
|
clientCert = signingCert.signRequestObject(
|
||||||
|
csr, serialNumber=1, digestAlgorithm="sha1")
|
||||||
|
return PrivateCertificate.fromCertificateAndKeyPair(clientCert, clientKey)
|
||||||
|
|
||||||
|
|
||||||
|
def and_generate():
|
||||||
|
name = "llamas"
|
||||||
|
pem = clientCertFor(name.encode("utf-8")).dumpPEM()
|
||||||
|
FilePath(name.encode("utf-8") + b".client.private.pem").setContent(pem)
|
||||||
|
return pem
|
Loading…
Reference in New Issue