3

ツイストSSLクライアントでSSLサーバー証明書を検証するにはどうすればよいですか?

私はSSLの初心者であり、ねじれたSSLチュートリアルを実行しましたが、それでもいくつかのことについて不明です。

私の質問は次のとおりです。

  • twisted.internet.sslモジュールを使用してSSLサーバー証明書を検証するにはどうすればよいですか?

  • SSLssl.ClientContextFactory.getContextを処理する際のメソッドの有用性

  • ツイストSSLクライアントに公開鍵ファイルの場所を知らせるにはどうすればよいですか?

4

1 に答える 1

4

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とその値を見つけるには、それぞれを解析する必要があります。

于 2013-02-27T02:42:03.690 に答える