サーバ証明書を動的に生成するSSLサーバ
通常、SSLでの接続を受け付けるサーバアプリケーションではサーバ証明書を用意する必要があるが、ちょっとしたテストなどでいちいち証明書を管理するのが面倒な場合には、証明書を動的に作成して使用することもできる。以下は foolscap を参考に作成したサンプルコードだ。
import sys from twisted.internet import protocol, reactor, ssl from twisted.protocols import basic class EchoProtocol(basic.LineReceiver): def lineReceived(self, line): self.transport.write(line+"\r\n") class EchoFactory(protocol.ServerFactory): protocol = EchoProtocol dn = ssl.DistinguishedName(commonName="test dn") keypair = ssl.KeyPair.generate() req = keypair.certificateRequest(dn) def verify(dn): return True serialno = 111 issuer = ssl.DistinguishedName(commonName="test issuer") certData = keypair.signCertificateRequest(issuer, req, verify, serialno) cert = keypair.newCertificate(certData) contextFactory = cert.options() reactor.listenSSL(9999, EchoFactory(), contextFactory) reactor.run()