ssl -- SSL/TLS モジュール

このモジュールは、該当する :term:`CPython` モジュールのサブセットを実装しています。 詳しくはオリジナルの CPython ドキュメンテーションを参照してください: ssl.

このモジュールは Transport Layer Security (以前は “Secure Sockets Layer” とと呼ばれていて、今でもこの名称で呼ばれることが多々あります)による暗号化とクライアント側とサーバー側のネットワークソケットのピア認証機能へのアクセスを提供します。

関数

ssl.wrap_socket(sock, server_side=False, keyfile=None, certfile=None, cert_reqs=CERT_NONE, cadata=None, server_hostname=None, do_handshake=True)

stream sock (通常は SOCK_STREAM タイプの socket.socket インスタンス)を引数としてとり、SSL コンテキストで基本となるストリームをラップした ssl.SSLSocket インスタンスを返します。返されるオブジェクトには read(), write() のような通常の stream インスタンスのインタフェースメソッドをがあります。サーバー側の SSL ソケットは、非 SSL リスニングサーバーソケットの accept() から返される通常のソケットから作成する必要があります。

  • do_handshake は、ハンドシェイクが wrap_socket の一部として実行されるか、最初の読み書きの一部として実行するよう延期するかを決定します(CPython にあるような do_handshake メソッドはありません)。ブロッキングソケットの場合はハンドシェイクをすぐに実行するのが標準です。非ブロッキングソケットの場合(つまり wrap_socket に渡した sock が非ブロッキングモードの場合)、ハンドシェイクは一般的に延期すべきです。さもなければ wrap_socket がハンドシェイクの完了までブロックするからです。AXTLS では、ハンドシェイクは最初の読み書きまで延期できますが、その後は完了するまでブロックされることに注意してください。
  • cert_reqs はピア(サーバーまたはクライアント)が有効な証明書を提示しなければならないかを指定します。 mbedtls ベースのポートでは ssl.CERT_NONEssl.CERT_OPTIONAL が証明書を検証せず、 ssl.CERT_REQUIRED だけが証明書を検証します。
  • cadata は、ピアの証明書を検証するためのCA証明書チェーン(DERフォーマット)をバイト列オブジェクトにしたものです。現在のところ、単一のDERエンコードされた証明書のみをサポートします。
  • server_hostname はクライアントとして使用するためのもので、受信したサーバー証明書と照合するためのホスト名を指定します。また、これはサーバー名表示(SNI: Server Name Indication)としても使われ、サーバーが適切な証明書を提示できるようにします。

特定の MicroPython ポート のモジュールの実装によっては、 上記のキーワード引数の一部またはすべてがサポートされていない可能性があります。

警告

ssl モジュールの実装によってはサーバー証明書の検証が行われないため、中間者攻撃を受けやすい SSL 接続になってしまいます。

CPython の wrap_socketSSLSocket オブジェクトを返します。このオブジェクトには sendrecv などソケットのための典型的なメソッドがあります。MicroPython の wrap_socket は CPython の SSLObject に類似のオブジェクトを返しますが、ソケットメソッドはありません。

例外

ssl.SSLError

この例外は存在しません。代わりにベースクラスの OSError が使われます。

定数

ssl.CERT_NONE
ssl.CERT_OPTIONAL
ssl.CERT_REQUIRED

cert_reqs パラメーターでサポートされる値です。