Twisted 14.0以降、optionsForClientTLS
これを行うための最良の方法は次のとおりです。
from twisted.internet.ssl import optionsForClientTLS
from twisted.internet.endpoints import SSL4ClientEndpoint
ctx = optionsForClientTLS(hostname=u"example.com")
endpoint = SSL4ClientEndpoint(reactor, host, port, ctx)
factory = ...
d = endpoint.connect(factory)
...
optionsForClientTLS
他の(オプションの)引数も取りますが、これも役立つ場合があります。
Twisted 14.0より前は、プロセスはもう少し複雑でした。
notBefore
接続が確立され、SSLハンドシェイクが正常に完了した後(つまり、証明書はその値と値に基づいて現在有効でnotAfter
あり、信頼できることを示した認証局証明書によって署名されていることを意味します)、トランスポートから証明書を取得できます。 :
certificate = self.transport.getPeerCertificate()
証明書は、pyOpenSSLX509インスタンスとして表されます。証明書のサブジェクト名を取得するために使用できるメソッドがあります。
subject_name = certificate.get_subject()
サブジェクト名は識別名であり、pyOpenSSLX509Nameインスタンスとして表されます。あなたはそのフィールドを調べることができます:
common_name = subject_name.commonName
これは文字列です。たとえば、"example.com"
。
代わりに検査する必要がある場合subjectAltName
(おそらくそうします)、証明書の拡張機能でこの情報を見つけることができます。
extensions = certificate.get_extensions()
これは、pyOpenSSLX509Extensionインスタンスのリストです。subjectAltName
とその値を見つけるには、それぞれを解析する必要があります。