ssl --- socket 物件的 TLS/SSL 包裝器¶
原始碼:Lib/ssl.py
這個模組向用戶端及伺服器端提供了對於網路 socket 的傳輸層安全性協定(或稱為「安全通訊協定 (Secure Sockets Layer)」)加密及身分驗證功能。這個模組使用 OpenSSL 套件。
This is an optional module. If it is missing from your copy of CPython, look for documentation from your distributor (that is, whoever provided Python to you). If you are the distributor, see 可選模組的需求.
備註
由於呼叫了作業系統的 socket APIs,有些行為會根據平台而有所不同。OpenSSL 的安裝版本也會對模組的運作產生影響。例如,OpenSSL 版本 1.1.1 附帶 TLSv1.3。
警告
在使用此模組之前,請閱讀 Security considerations。如果不這樣做,可能會產生錯誤的安全性認知,因為 ssl 模組的預設設定未必適合你的應用程式。
可用性: not WASI.
此模組在 WebAssembly 平台上不起作用或無法使用。更多資訊請參閱 WebAssembly 平台。
這個章節記錄了 ssl 模組的物件及函式;關於 TSL、SSL、以及憑證的更多資訊,可以去參考此章節底部的「詳情」部分。
此模組提供了一個 ssl.SSLSocket 類別,它是從 socket.socket 衍生出來的,並且提供類似 socket 的包裝器,讓使用 SSL 進行資料傳輸時,可以進行資料的加密及解密。它也提供了一些額外的方法,如 getpeercert(),用於取得連結另一端的憑證;以及 cipher(),用於搜尋用於安全連接的加密方法 (cipher);和 get_verified_chain()、get_unverified_chain() 能用於取得憑證鏈。
對於更複雜的應用程式,ssl.SSLContext 類別有助於管理設定及認證,然後可以透過 SSLContext.wrap_socket() 方法建立的 SSL socket 繼承這些設定和認證。
在 3.5.3 版的變更: 更新以支援與 OpenSSL 1.1.0 進行連結
在 3.6 版的變更: OpenSSL 0.9.8, 1.0.0 及 1.0.1 版本已被棄用且不再支援。在未來 ssl 模組將需要至少 OpenSSL 1.0.2 版本或 1.1.0 版本。
在 3.10 版的變更: PEP 644 已經被實作。ssl 模組需要 OpenSSL 1.1.1 以上的版本才能使用。
使用已經被棄用的常數或函式將會導致棄用警示。
函式、常數與例外¶
Socket 建立¶
SSLSocket 實例必須使用 SSLContext.wrap_socket() 方法來建立。輔助函式 create_default_context() 會回傳有安全預設設定的新語境 (context)。
使用預設語境及 IPv4/IPv6 雙協定堆疊的用戶端 socket 範例:
import socket
import ssl
hostname = 'www.python.org'
context = ssl.create_default_context()
with socket.create_connection((hostname, 443)) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as