SO に関する Jean-Paul Calderone からのアドバイスに従って、以下のねじれた「starttls_server」サンプルを変更して、ssl.ClientCertificateOptions の使用をサポートし、秘密鍵、証明書、および信頼されたルートを指定できるようにしようとしています。http://twistedmatrix.com/documents/14.0.0/api/twisted.internet.ssl.CertificateOptions.html
from twisted.internet import ssl, protocol, defer, task, endpoints
from twisted.protocols.basic import LineReceiver
from twisted.python.modules import getModule
class TLSServer(LineReceiver):
def lineReceived(self, line):
print("received: " + line)
if line == "STARTTLS":
print("-- Switching to TLS")
self.sendLine('READY')
self.transport.startTLS(self.factory.options)
def main(reactor):
certData = getModule(__name__).filePath.sibling('server.pem').getContent()
cert = ssl.PrivateCertificate.loadPEM(certData)
factory = protocol.Factory.forProtocol(TLSServer)
factory.options = cert.options()
endpoint = endpoints.TCP4ServerEndpoint(reactor, 8000)
endpoint.listen(factory)
return defer.Deferred()
if __name__ == '__main__':
import starttls_server
task.react(starttls_server.main)
私の理解では、cert = ssl.PrivateCertificate...
andcert.options = ssl.PrivateCertificate....
行をcertopts = ssl.CertificateOptions(privateKey=pKeyData, certificate=certData, trustRoot=caCertsData)
(適切なファイルを certData、caCertsData、および pKeyData に読み込んで) のようなものに効果的に置き換え、これをに渡す必要があるということですfactory.options
が、試したコードのすべてのバリアントを貼り付けることなく、 'まだこれを正しく解決していません - 私の努力は、古典的な "OpenSSL.crypto.Error: []" から、私の 3 つの PEM ファイルの内容を画面にダンプして終了するように見えるまで、さまざまな結果を生み出しました!
誰でも私を啓発できますか?ありがとうございました :)