読者です 読者をやめる 読者になる 読者になる

サーバ証明書を動的に生成するSSLサーバ

twisted python

通常、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()