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, ca_certs=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 では、ハンドシェイクは最初の読み書きまで延期できますが、その後は完了するまでブロックされることに注意してください。
特定の MicroPython ポート のモジュールの実装によっては、 上記のキーワード引数の一部またはすべてがサポートされていない可能性があります。
- do_handshake は、ハンドシェイクが
警告
ssl
モジュールの実装によってはサーバー証明書の検証が行われないため、中間者攻撃を受けやすい SSL 接続になってしまいます。
CPython の wrap_socket
は SSLSocket
オブジェクトを返します。このオブジェクトには send
や recv
などソケットのための典型的なメソッドがあります。MicroPython の wrap_socket
は CPython の SSLObject
に類似のオブジェクトを返しますが、ソケットメソッドはありません。