Hướng dẫn does python use tls? - python có sử dụng tls không?

Mã nguồn: lib/ssl.py Lib/ssl.py


Mô-đun này cung cấp quyền truy cập vào bảo mật lớp vận chuyển (thường được gọi là các cơ sở mã hóa và xác thực ngang hàng an toàn cho các ổ cắm và xác thực ngang hàng cho ổ cắm mạng, cả phía máy khách và phía máy chủ. Mô -đun này sử dụng thư viện OpenSSL. Nó có sẵn trên tất cả các hệ thống Unix, Windows, MacOS hiện đại và có thể là các nền tảng bổ sung, miễn là OpenSSL được cài đặt trên nền tảng đó.

Ghi chú

Một số hành vi có thể phụ thuộc vào nền tảng, vì các cuộc gọi được thực hiện cho API ổ cắm hệ điều hành. Phiên bản cài đặt của OpenSSL cũng có thể gây ra các biến thể trong hành vi. Ví dụ: TLSV1.3 với OpenSSL phiên bản 1.1.1.

Cảnh báo

Don Tiết sử dụng mô -đun này mà không cần đọc các cân nhắc bảo mật. Làm như vậy có thể dẫn đến một cảm giác bảo mật sai, vì các cài đặt mặc định của mô -đun SSL không nhất thiết phù hợp với ứng dụng của bạn.Security considerations. Doing so may lead to a false sense of security, as the default settings of the ssl module are not necessarily appropriate for your application.

Tính khả dụng: Không phải emscripten, không phải wasi.: not Emscripten, not WASI.

Mô -đun này không hoạt động hoặc không có sẵn trên các nền tảng Webassugging

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
3 và
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
4. Xem các nền tảng Webassugging để biết thêm thông tin.WebAssembly platforms for more information.

Phần này ghi lại các đối tượng và chức năng trong mô -đun

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
5; Để biết thêm thông tin chung về TLS, SSL và chứng chỉ, người đọc được giới thiệu đến các tài liệu trong phần See See See cũng ở phía dưới.

Mô-đun này cung cấp một lớp,

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
6, có nguồn gốc từ loại
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
7 và cung cấp một trình bao bọc giống như ổ cắm cũng mã hóa và giải mã dữ liệu đi qua ổ cắm với SSL. Nó hỗ trợ các phương thức bổ sung như
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
8, lấy lại chứng chỉ của phía bên kia của kết nối và
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
9, lấy lại mật mã được sử dụng cho kết nối an toàn.

Đối với các ứng dụng tinh vi hơn, lớp

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
0 giúp quản lý các cài đặt và chứng chỉ, sau đó có thể được kế thừa bởi các ổ cắm SSL được tạo thông qua phương thức
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1.

Đã thay đổi trong phiên bản 3.5.3: Được cập nhật để hỗ trợ liên kết với OpenSSL 1.1.0Updated to support linking with OpenSSL 1.1.0

Đã thay đổi trong phiên bản 3.6: OpenSSL 0.9.8, 1.0.0 và 1.0.1 không còn được hỗ trợ và không còn được hỗ trợ. Trong tương lai, mô -đun SSL sẽ yêu cầu ít nhất OpenSSL 1.0.2 hoặc 1.1.0.OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported. In the future the ssl module will require at least OpenSSL 1.0.2 or 1.1.0.

Thay đổi trong phiên bản 3.10: PEP 644 đã được triển khai. Mô -đun SSL yêu cầu OpenSSL 1.1.1 hoặc mới hơn.PEP 644 has been implemented. The ssl module requires OpenSSL 1.1.1 or newer.

Việc sử dụng các hằng số và chức năng không dùng nữa dẫn đến cảnh báo phản đối.

Các chức năng, hằng số và ngoại lệ

Tạo ổ cắm tạo

Vì Python 3.2 và 2.7.9, nên sử dụng

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1 của một ví dụ
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3 để bọc các ổ cắm dưới dạng các đối tượng
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4. Chức năng của người trợ giúp
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
5 trả về một bối cảnh mới với các cài đặt mặc định an toàn. Hàm
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6 cũ không được chấp nhận vì nó không hiệu quả và không có hỗ trợ cho chỉ báo tên máy chủ (SNI) và khớp tên máy chủ.

Ví dụ về ổ cắm máy khách với bối cảnh mặc định và ngăn xếp kép IPv4/IPv6:

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 ssock:
        print(ssock.version())

Ví dụ về ổ cắm máy khách với bối cảnh tùy chỉnh và IPv4:

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())

Ví dụ về ổ cắm máy chủ nghe trên localhost ipv4:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...

Tạo ra bối cảnh

Một hàm tiện lợi giúp tạo các đối tượng

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3 cho các mục đích chung.

ssl.create_default_context (mục đích = purda.server_auth, cafile = none, capath = none, cadata = none) ¶create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None)

Trả về một đối tượng

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3 mới với các cài đặt mặc định cho mục đích đã cho. Các cài đặt được chọn bởi mô -đun
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
5 và thường biểu thị mức bảo mật cao hơn so với khi gọi trực tiếp vào hàm tạo
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3.

CAFILE, CAPATH, CADATA đại diện cho các chứng chỉ CA tùy chọn để tin tưởng để xác minh chứng chỉ, như trong

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
1. Nếu cả ba là
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2, chức năng này có thể chọn tin tưởng vào chứng chỉ CA mặc định của hệ thống.

Các cài đặt là:

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
4,
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
5 và
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
6 với các bộ mật mã mã hóa cao mà không có RC4 và không có bộ mật mã không được chứng minh. Vượt qua
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
7 dưới dạng mục đích đặt
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
8 cho
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và tải chứng chỉ CA (khi ít nhất một trong CAFILE, CAPATH hoặc CADATA được đưa ra) hoặc sử dụng
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
0 để tải chứng chỉ CA mặc định.

Khi

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
1 được hỗ trợ và biến môi trường
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
2 được đặt,
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
5 cho phép ghi nhật ký khóa.
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
2 is set,
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
5 enables key logging.

Ghi chú

Giao thức, Tùy chọn, mật mã và các cài đặt khác có thể thay đổi thành các giá trị hạn chế hơn bất cứ lúc nào mà không cần khấu trừ trước. Các giá trị thể hiện sự cân bằng hợp lý giữa khả năng tương thích và bảo mật.

Nếu ứng dụng của bạn cần cài đặt cụ thể, bạn nên tạo một

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3 và tự mình áp dụng cài đặt.

Ghi chú

Nếu bạn thấy rằng khi một số máy khách hoặc máy chủ cũ hơn, cố gắng kết nối với

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3 được tạo bởi chức năng này, họ sẽ gặp lỗi cho thấy giao thức hoặc bộ mật mã không phù hợp, thì có thể họ chỉ hỗ trợ SSL3.0 mà chức năng này loại trừ bằng cách sử dụng
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
6. SSL3.0 được coi là bị phá vỡ hoàn toàn. Nếu bạn vẫn muốn tiếp tục sử dụng chức năng này nhưng vẫn cho phép các kết nối SSL 3.0, bạn có thể kích hoạt lại chúng bằng cách sử dụng:

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3

Mới trong phiên bản 3.4.

Đã thay đổi trong phiên bản 3.4.4: RC4 đã bị loại khỏi chuỗi mật mã mặc định.RC4 was dropped from the default cipher string.

Đã thay đổi trong phiên bản 3.6: Chacha20/poly1305 đã được thêm vào chuỗi mật mã mặc định.ChaCha20/Poly1305 was added to the default cipher string.

3DES đã bị loại khỏi chuỗi mật mã mặc định.

Đã thay đổi trong phiên bản 3.8: Hỗ trợ đăng nhập khóa thành

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
2 đã được thêm vào.Support for key logging to
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
2 was added.

Ngoại lệ ha

ngoại lệSl.sslerror¶ssl.SSLError

Nêu ra để báo hiệu một lỗi từ việc triển khai SSL cơ bản (hiện được cung cấp bởi thư viện OpenSSL). Điều này biểu thị một số vấn đề trong lớp mã hóa và xác thực cấp cao hơn mà đã chồng lên nhau trên kết nối mạng cơ bản. Lỗi này là một loại phụ của

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
8. Mã lỗi và thông báo của các trường hợp
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 được cung cấp bởi thư viện OpenSSL.

thư viện¶

Một chuỗi ghi nhớ chỉ định mô hình con openSSL trong đó xảy ra lỗi, chẳng hạn như

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
0,
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
1 hoặc
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
2. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.

Mới trong phiên bản 3.3.

lý do¶

Một chuỗi ghi nhớ chỉ định lý do lỗi này xảy ra, ví dụ

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
3. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.

Mới trong phiên bản 3.3.

lý do¶ ssl.SSLZeroReturnError

Một chuỗi ghi nhớ chỉ định lý do lỗi này xảy ra, ví dụ

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
3. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.

Mới trong phiên bản 3.3.

lý do¶ssl.SSLWantReadError

Một chuỗi ghi nhớ chỉ định lý do lỗi này xảy ra, ví dụ

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
3. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.non-blocking SSL socket when trying to read or write data, but more data needs to be received on the underlying TCP transport before the request can be fulfilled.

Mới trong phiên bản 3.3.

lý do¶ssl.SSLWantWriteError

Một chuỗi ghi nhớ chỉ định lý do lỗi này xảy ra, ví dụ

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
3. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.non-blocking SSL socket when trying to read or write data, but more data needs to be sent on the underlying TCP transport before the request can be fulfilled.

Mới trong phiên bản 3.3.

lý do¶ ssl.SSLSyscallError

Một chuỗi ghi nhớ chỉ định lý do lỗi này xảy ra, ví dụ

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
3. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.

Mới trong phiên bản 3.3.

lý do¶ssl.SSLEOFError

Một chuỗi ghi nhớ chỉ định lý do lỗi này xảy ra, ví dụ

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
3. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.

Mới trong phiên bản 3.3.

lý do¶ ssl.SSLCertVerificationError

Một chuỗi ghi nhớ chỉ định lý do lỗi này xảy ra, ví dụ

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
3. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.

ngoại lệSl.sslzeroreturrorrorrorrorrorrorrorrorrorrorrorrorrorror

Một lớp con của
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 được nêu ra khi cố gắng đọc hoặc viết và kết nối SSL đã được đóng sạch sẽ. Lưu ý rằng điều này không có nghĩa là vận chuyển cơ bản (đọc TCP) đã bị đóng cửa.

ngoại lệSl.sslwantreaderrorror¶

Một lớp con của
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 được nâng lên bởi một ổ cắm SSL không chặn khi cố gắng đọc hoặc ghi dữ liệu, nhưng cần nhận được nhiều dữ liệu hơn trên vận chuyển TCP cơ bản trước khi yêu cầu có thể được thực hiện.

ngoại lệSl.sslwantwriteerrorrorrorrorrorrorrorrorrorrorrorrorror

Một lớp con của
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 được nâng lên bởi một ổ cắm SSL không chặn khi cố gắng đọc hoặc ghi dữ liệu, nhưng cần nhiều dữ liệu hơn trên vận chuyển TCP cơ bản trước khi yêu cầu có thể được thực hiện.
ssl.CertificateError

ngoại lệSl.ssssyscallerror¶

Một lớp con của >>> ssl.enum_certificates("CA") [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}), (b'data...', 'x509_asn', True)] 9 được nêu ra khi gặp lỗi hệ thống trong khi cố gắng thực hiện một hoạt động trên ổ cắm SSL. Thật không may, không có cách nào dễ dàng để kiểm tra số ERRNO ban đầu.

ngoại lệSl.ssleoferror¶RAND_bytes(num)

Một lớp con của

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 được nâng lên khi kết nối SSL đã bị chấm dứt đột ngột. Nói chung, bạn không nên cố gắng sử dụng lại phương tiện vận chuyển cơ bản khi gặp lỗi này.

ngoại lệSL.SSLCERTVERENTERERRORROR EX

Một lớp con của

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 được nâng lên khi xác thực chứng chỉ đã thất bại.

Mới trong phiên bản 3.3.

lý do¶RAND_pseudo_bytes(num)

Một chuỗi ghi nhớ chỉ định lý do lỗi này xảy ra, ví dụ

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
3. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.

ngoại lệSl.sslzeroreturrorrorrorrorrorrorrorrorrorrorrorrorrorror

ngoại lệSL.SSLCERTVERENTERERRORROR EX

Mới trong phiên bản 3.3.

lý do¶RAND_status()

Một chuỗi ghi nhớ chỉ định lý do lỗi này xảy ra, ví dụ

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'
3. Phạm vi của các giá trị có thể phụ thuộc vào phiên bản OpenSSL.

ngoại lệSl.sslzeroreturrorrorrorrorrorrorrorrorrorrorrorrorrorrorRAND_add(bytes, entropy)

Một lớp con của

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 được nêu ra khi cố gắng đọc hoặc viết và kết nối SSL đã được đóng sạch sẽ. Lưu ý rằng điều này không có nghĩa là vận chuyển cơ bản (đọc TCP) đã bị đóng cửa.RFC 1750 for more information on sources of entropy.

ngoại lệSl.sslwantreaderrorror¶

Một lớp con của
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 được nâng lên bởi một ổ cắm SSL không chặn khi cố gắng đọc hoặc ghi dữ liệu, nhưng cần nhận được nhiều dữ liệu hơn trên vận chuyển TCP cơ bản trước khi yêu cầu có thể được thực hiện.
match_hostname(cert, hostname)

ngoại lệSl.sslwantwriteerrorrorrorrorrorrorrorrorrorrorrorrorrorRFC 2818, RFC 5280 and RFC 6125. In addition to HTTPS, this function should be suitable for checking the identity of servers in various SSL-based protocols such as FTPS, IMAPS, POPS and others.

>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
4 được nâng lên khi thất bại. Khi thành công, chức năng không trả lại gì:

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'

Mới trong phiên bản 3.2.

Đã thay đổi trong phiên bản 3.3.3: Hàm hiện theo RFC 6125, Mục 6.4.3 và không khớp với nhiều ký tự đại diện (ví dụ:

>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
5 hoặc
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
6) cũng như một ký tự đại diện bên trong đoạn tên miền quốc tế hóa (IDN). Các nhãn A IDN như
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
7 vẫn được hỗ trợ, nhưng
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
8 không còn khớp với
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
9.The function now follows RFC 6125, section 6.4.3 and does neither match multiple wildcards (e.g.
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
5 or
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
6) nor a wildcard inside an internationalized domain names (IDN) fragment. IDN A-labels such as
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
7 are still supported, but
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
8 no longer matches
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
9.

Đã thay đổi trong phiên bản 3.5: Kết hợp các địa chỉ IP, khi có mặt trong trường pentalaltname của chứng chỉ, hiện được hỗ trợ.Matching of IP addresses, when present in the subjectAltName field of the certificate, is now supported.

Đã thay đổi trong phiên bản 3.7: Hàm không còn được sử dụng để kết nối TLS. Kết hợp tên máy chủ hiện được thực hiện bởi OpenSSL.The function is no longer used to TLS connections. Hostname matching is now performed by OpenSSL.

Cho phép ký tự đại diện khi nó là cùng bên trái và là nhân vật duy nhất trong phân khúc đó. Các ký tự đại diện một phần như

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
00 không còn được hỗ trợ.

Không dùng nữa kể từ phiên bản 3.7.

ssl.cert_time_to_seconds (cert_time) ¶cert_time_to_seconds(cert_time)

Trả lại thời gian tính bằng vài giây kể từ kỷ nguyên, được đưa ra chuỗi ____101 đại diện cho ngày không phải là trước hoặc không phải là người khác từ một chứng chỉ ở định dạng

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
02 Strptime (locale).

Đây là một ví dụ:

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43

Ngày của Note trước khi không phải là người khác phải sử dụng GMT (RFC 5280).RFC 5280).

Đã thay đổi trong phiên bản 3.5: Giải thích thời gian đầu vào là thời gian trong UTC theo quy định của múi giờ GMT GMT trong chuỗi đầu vào. Timezone địa phương đã được sử dụng trước đây. Trả về một số nguyên (không có phân số thứ hai ở định dạng đầu vào)Interpret the input time as a time in UTC as specified by ‘GMT’ timezone in the input string. Local timezone was used previously. Return an integer (no fractions of a second in the input format)

ssl.get_server_certificate (addr, ssl_version = protocol_tls_client, Ca_certs = none [, thời gian chờ]) ¶get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, ca_certs=None[, timeout])

Với địa chỉ

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
03 của máy chủ được bảo vệ SSL, dưới dạng cặp (tên máy chủ, số cổng), lấy chứng chỉ máy chủ và trả về nó dưới dạng chuỗi được mã hóa PEM. Nếu
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
04 được chỉ định, hãy sử dụng phiên bản đó của giao thức SSL để cố gắng kết nối với máy chủ. Nếu
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
05 được chỉ định, nó phải là một tệp chứa danh sách các chứng chỉ gốc, định dạng tương tự như được sử dụng cho cùng một tham số trong
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1. Cuộc gọi sẽ cố gắng xác nhận chứng chỉ máy chủ so với bộ chứng chỉ gốc đó và sẽ thất bại nếu lần thử xác thực không thành công. Một thời gian chờ có thể được chỉ định với tham số
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
07.

Đã thay đổi trong phiên bản 3.3: Hàm này hiện tương thích IPv6.This function is now IPv6-compatible.

Đã thay đổi trong phiên bản 3.5: SSL_Version mặc định được thay đổi từ

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
08 thành
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
09 để tương thích tối đa với các máy chủ hiện đại.The default ssl_version is changed from
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
08 to
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
09 for maximum compatibility with modern servers.

Thay đổi trong phiên bản 3.10: Tham số thời gian chờ đã được thêm vào.The timeout parameter was added.

SSL.DER_CERT_TO_PEM_CERT (DER_CERT_BYTES) ¶DER_cert_to_PEM_cert(DER_cert_bytes)

Đưa ra một chứng chỉ dưới dạng blob được mã hóa bởi các byte, trả về phiên bản chuỗi được mã hóa PEM của cùng một chứng chỉ.

SSL.PEM_CERT_TO_DER_CERT (PEM_CERT_STRING) ¶PEM_cert_to_DER_cert(PEM_cert_string)

Đưa ra một chứng chỉ dưới dạng chuỗi PEM ASCII, trả về một chuỗi byte được mã hóa der cho cùng chứng chỉ đó.

ssl.get_default_verify_paths () ¶get_default_verify_paths()

Trả về một tuple có tên với các đường dẫn đến CAFILE và CAPATH mặc định của OpenSSL. Các đường dẫn giống như được sử dụng bởi

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
10. Giá trị trả về là một tuple có tên
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
11:named tuple
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
11:

  • hostname = 'www.python.org'
    # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_verify_locations('path/to/cabundle.pem')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    
    12 - Đường dẫn đã được giải quyết đến CAFILE hoặc
    >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    2 nếu tệp không tồn tại,

  • hostname = 'www.python.org'
    # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_verify_locations('path/to/cabundle.pem')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    
    14 - Đường dẫn đã được giải quyết đến Capath hoặc
    >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    2 nếu thư mục không tồn tại,

  • hostname = 'www.python.org'
    # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_verify_locations('path/to/cabundle.pem')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    
    16 - Khóa môi trường OpenSSL chỉ vào CAFILE,

  • hostname = 'www.python.org'
    # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_verify_locations('path/to/cabundle.pem')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    
    17 - Đường dẫn được mã hóa cứng đến CAFILE,

  • hostname = 'www.python.org'
    # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_verify_locations('path/to/cabundle.pem')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    
    18 - Khóa môi trường OpenSSL chỉ vào Capath,

  • hostname = 'www.python.org'
    # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_verify_locations('path/to/cabundle.pem')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    
    19 - Đường dẫn mã hóa cứng đến thư mục Capath

Mới trong phiên bản 3.4.

ssl.enum_certificates (store_name) ¶enum_certificates(store_name)

Truy xuất chứng chỉ từ cửa hàng chứng chỉ hệ thống windows. Store_name có thể là một trong số

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
20,
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
21 hoặc
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
22. Windows cũng có thể cung cấp các cửa hàng chứng chỉ bổ sung.

Hàm trả về một danh sách các bộ dữ liệu (cert_bytes, expoding_type, tin cậy). Mã hóa_type chỉ định mã hóa Cert_Bytes. Đó là

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
23 cho dữ liệu X.509 ASN.1 hoặc
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
24 cho dữ liệu PKCS#7 ASN.1. Tin tưởng chỉ định mục đích của chứng chỉ là một tập hợp OID hoặc chính xác
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
5 nếu chứng chỉ đáng tin cậy cho tất cả các mục đích.

Example:

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]

Tính khả dụng: Windows.: Windows.

Mới trong phiên bản 3.4.

ssl.enum_certificates (store_name) ¶enum_crls(store_name)

Truy xuất chứng chỉ từ cửa hàng chứng chỉ hệ thống windows. Store_name có thể là một trong số

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
20,
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
21 hoặc
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
22. Windows cũng có thể cung cấp các cửa hàng chứng chỉ bổ sung.

Hàm trả về một danh sách các bộ dữ liệu (cert_bytes, expoding_type, tin cậy). Mã hóa_type chỉ định mã hóa Cert_Bytes. Đó là

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
23 cho dữ liệu X.509 ASN.1 hoặc
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
24 cho dữ liệu PKCS#7 ASN.1. Tin tưởng chỉ định mục đích của chứng chỉ là một tập hợp OID hoặc chính xác
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
5 nếu chứng chỉ đáng tin cậy cho tất cả các mục đích.

Tính khả dụng: Windows.: Windows.

Mới trong phiên bản 3.4.

ssl.enum_certificates (store_name) ¶wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ssl_version=PROTOCOL_TLS, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None)

Truy xuất chứng chỉ từ cửa hàng chứng chỉ hệ thống windows. Store_name có thể là một trong số

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
20,
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
21 hoặc
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
22. Windows cũng có thể cung cấp các cửa hàng chứng chỉ bổ sung.

Trong nội bộ, chức năng tạo ra

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3 với giao thức SSL_Version và
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
38 được đặt thành cert_reqs. Nếu các tham số KEYFILE, CERTFILE, CA_CERTS hoặc mật mã được đặt, thì các giá trị được truyền đến
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
39,
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
1 và
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
41.

Các đối số server_side, do_handshake_on_connect và urpress_ragged_eofs có ý nghĩa tương tự như

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1.

Đã không dùng từ phiên bản 3.7: Kể từ Python 3.2 và 2.7.9, nên sử dụng

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1 thay vì
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6. Hàm cấp cao nhất bị giới hạn và tạo ra một ổ cắm máy khách không an toàn mà không cần chỉ định tên máy chủ hoặc khớp tên máy chủ.Since Python 3.2 and 2.7.9, it is recommended to use the
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1 instead of
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6. The top-level function is limited and creates an insecure client socket without server name indication or hostname matching.

Hằng số trong

ssl.cert_none¶CERT_NONE

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
45 hoặc tham số
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
46 thành
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6. Ngoại trừ
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3, nó là chế độ mặc định. Với ổ cắm phía khách hàng, bất kỳ chứng chỉ nào cũng được chấp nhận. Các lỗi xác thực, chẳng hạn như chứng nhận không tin cậy hoặc hết hạn, bị bỏ qua và không phá thai bắt tay TLS/SSL.

Trong chế độ máy chủ, không có chứng chỉ nào được yêu cầu từ máy khách, vì vậy khách hàng không gửi bất kỳ cho xác thực CERT của khách hàng.

Xem các cuộc thảo luận về các cân nhắc bảo mật dưới đây.Security considerations below.

ssl.cert_optional¶CERT_OPTIONAL

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
45 hoặc tham số
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
46 thành
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6. Trong chế độ máy khách,
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
52 có ý nghĩa tương tự như
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9. Thay vào đó, bạn nên sử dụng
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 cho ổ cắm phía máy khách.

Trong chế độ máy chủ, yêu cầu chứng chỉ máy khách được gửi đến máy khách. Khách hàng có thể bỏ qua yêu cầu hoặc gửi chứng chỉ để thực hiện xác thực CERT của TLS Client Cert. Nếu khách hàng chọn gửi chứng chỉ, nó đã được xác minh. Bất kỳ lỗi xác minh ngay lập tức hủy bỏ cái bắt tay TLS.

Việc sử dụng cài đặt này yêu cầu một bộ chứng chỉ CA hợp lệ được thông qua, hoặc là

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
1 hoặc là giá trị của tham số
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
05 thành
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6.

ssl.cert_required¶CERT_REQUIRED

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
45 hoặc tham số
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
46 thành
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6. Trong chế độ này, các chứng chỉ được yêu cầu từ phía bên kia của kết nối ổ cắm; Một
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 sẽ được nêu ra nếu không có chứng chỉ nào được cung cấp hoặc nếu xác thực của nó không thành công. Chế độ này không đủ để xác minh chứng chỉ ở chế độ máy khách vì nó không khớp với tên máy chủ.
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 cũng phải được kích hoạt để xác minh tính xác thực của chứng chỉ.
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 sử dụng
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và cho phép
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 theo mặc định.not sufficient to verify a certificate in client mode as it does not match hostnames.
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 must be enabled as well to verify the authenticity of a cert.
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 uses
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 and enables
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 by default.

Với ổ cắm máy chủ, chế độ này cung cấp xác thực chứng chỉ máy khách TLS bắt buộc. Yêu cầu chứng chỉ máy khách được gửi cho khách hàng và khách hàng phải cung cấp chứng chỉ hợp lệ và đáng tin cậy.

Việc sử dụng cài đặt này yêu cầu một bộ chứng chỉ CA hợp lệ được thông qua, hoặc là

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
1 hoặc là giá trị của tham số
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
05 thành
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6.

ssl.cert_required¶ssl.VerifyMode

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
45 hoặc tham số
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
46 thành
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6. Trong chế độ này, các chứng chỉ được yêu cầu từ phía bên kia của kết nối ổ cắm; Một
>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 sẽ được nêu ra nếu không có chứng chỉ nào được cung cấp hoặc nếu xác thực của nó không thành công. Chế độ này không đủ để xác minh chứng chỉ ở chế độ máy khách vì nó không khớp với tên máy chủ.
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 cũng phải được kích hoạt để xác minh tính xác thực của chứng chỉ.
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 sử dụng
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và cho phép
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 theo mặc định.

Với ổ cắm máy chủ, chế độ này cung cấp xác thực chứng chỉ máy khách TLS bắt buộc. Yêu cầu chứng chỉ máy khách được gửi cho khách hàng và khách hàng phải cung cấp chứng chỉ hợp lệ và đáng tin cậy.

classSSSL.verifyMode¶VERIFY_DEFAULT

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
69 Bộ sưu tập hằng số cert_*.

Mới trong phiên bản 3.6.

ssl.verify_default¶VERIFY_CRL_CHECK_LEAF

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
70. Trong chế độ này, danh sách thu hồi chứng chỉ (CRLS) không được kiểm tra. Theo mặc định, OpenSSL không yêu cầu cũng không xác minh CRL.

Mới trong phiên bản 3.6.

ssl.verify_default¶VERIFY_CRL_CHECK_CHAIN

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
70. Trong chế độ này, danh sách thu hồi chứng chỉ (CRLS) không được kiểm tra. Theo mặc định, OpenSSL không yêu cầu cũng không xác minh CRL.

Mới trong phiên bản 3.6.

ssl.verify_default¶VERIFY_X509_STRICT

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
70. Trong chế độ này, danh sách thu hồi chứng chỉ (CRLS) không được kiểm tra. Theo mặc định, OpenSSL không yêu cầu cũng không xác minh CRL.

Mới trong phiên bản 3.6.

ssl.verify_default¶VERIFY_ALLOW_PROXY_CERTS

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
70. Trong chế độ này, danh sách thu hồi chứng chỉ (CRLS) không được kiểm tra. Theo mặc định, OpenSSL không yêu cầu cũng không xác minh CRL.

Mới trong phiên bản 3.4.

ssl.verify_crl_check_leaf¶VERIFY_X509_TRUSTED_FIRST

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
70. Trong chế độ này, chỉ có chứng chỉ ngang hàng được kiểm tra nhưng không có chứng chỉ CA trung gian nào. Chế độ yêu cầu CRL hợp lệ được ký bởi nhà phát hành Peer Cert (tổ tiên trực tiếp CA). Nếu không có CRL thích hợp nào được tải với
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
72, xác thực sẽ không thành công.

ssl.verify_crl_check_chain¶

Giá trị có thể cho
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
70. Trong chế độ này, CRLS của tất cả các chứng chỉ trong chuỗi cert Peer được kiểm tra.
VERIFY_X509_PARTIAL_CHAIN

ssl.verify_x509_strict¶

Mới trong phiên bản 3.4.

ssl.verify_crl_check_leaf¶ssl.VerifyFlags

Giá trị có thể cho

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
70. Trong chế độ này, chỉ có chứng chỉ ngang hàng được kiểm tra nhưng không có chứng chỉ CA trung gian nào. Chế độ yêu cầu CRL hợp lệ được ký bởi nhà phát hành Peer Cert (tổ tiên trực tiếp CA). Nếu không có CRL thích hợp nào được tải với
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
72, xác thực sẽ không thành công.

Với ổ cắm máy chủ, chế độ này cung cấp xác thực chứng chỉ máy khách TLS bắt buộc. Yêu cầu chứng chỉ máy khách được gửi cho khách hàng và khách hàng phải cung cấp chứng chỉ hợp lệ và đáng tin cậy.

classSSSL.verifyMode¶PROTOCOL_TLS

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
69 Bộ sưu tập hằng số cert_*.

Với ổ cắm máy chủ, chế độ này cung cấp xác thực chứng chỉ máy khách TLS bắt buộc. Yêu cầu chứng chỉ máy khách được gửi cho khách hàng và khách hàng phải cung cấp chứng chỉ hợp lệ và đáng tin cậy.

classSSSL.verifyMode¶TLS clients and servers require different default settings for secure communication. The generic TLS protocol constant is deprecated in favor of

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 and
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
4.

ssl.protocol_tls_client¶PROTOCOL_TLS_CLIENT

Tự động đàm phán phiên bản giao thức cao nhất mà cả hỗ trợ máy khách và máy chủ và định cấu hình các kết nối phía máy khách bối cảnh. Giao thức cho phép

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 theo mặc định.

Mới trong phiên bản 3.6.

ssl.protocol_tls_server¶PROTOCOL_TLS_SERVER

Tự động đàm phán phiên bản giao thức cao nhất mà cả hỗ trợ máy khách và máy chủ và định cấu hình các kết nối phía máy chủ ngữ cảnh.

Mới trong phiên bản 3.6.

ssl.protocol_tls_server¶PROTOCOL_SSLv23

Tự động đàm phán phiên bản giao thức cao nhất mà cả hỗ trợ máy khách và máy chủ và định cấu hình các kết nối phía máy chủ ngữ cảnh.

ssl.protocol_sslv23¶Use

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
09 instead.

Bí danh cho
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
09.
PROTOCOL_SSLv2

Thay thế từ phiên bản 3.6: sử dụng

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
09 thay thế.

ssl.protocol_sslv2¶

Chọn SSL phiên bản 2 làm giao thức mã hóa kênh.

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
85.

Cảnh báoOpenSSL has removed support for SSLv2.

Phiên bản SSL 2 không an toàn. Việc sử dụng nó rất nản lòng.PROTOCOL_SSLv3

Không dùng nữa kể từ phiên bản 3.6: OpenSSL đã loại bỏ hỗ trợ cho SSLV2.

ssl.protocol_sslv3¶

Chọn SSL phiên bản 2 làm giao thức mã hóa kênh.

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
85.

Cảnh báoPROTOCOL_TLSv1

Phiên bản SSL 2 không an toàn. Việc sử dụng nó rất nản lòng.

Không dùng nữa kể từ phiên bản 3.6: OpenSSL đã loại bỏ hỗ trợ cho SSLV2.OpenSSL has deprecated all version specific protocols.

ssl.protocol_sslv3¶PROTOCOL_TLSv1_1

Chọn SSL phiên bản 3 làm giao thức mã hóa kênh.

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
86.

Không dùng nữa kể từ phiên bản 3.6: OpenSSL đã loại bỏ hỗ trợ cho SSLV2.OpenSSL has deprecated all version specific protocols.

ssl.protocol_sslv3¶PROTOCOL_TLSv1_2

Chọn SSL phiên bản 3 làm giao thức mã hóa kênh.

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
86.

Không dùng nữa kể từ phiên bản 3.6: OpenSSL đã loại bỏ hỗ trợ cho SSLV2.OpenSSL has deprecated all version specific protocols.

ssl.protocol_sslv3¶OP_ALL

Chọn SSL phiên bản 3 làm giao thức mã hóa kênh.

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
86.

Phiên bản SSL 3 không an toàn. Việc sử dụng nó rất nản lòng.OP_NO_SSLv2

ssl.protocol_tlsv1¶

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
86.

Phiên bản SSL 3 không an toàn. Việc sử dụng nó rất nản lòng.SSLv2 is deprecated

ssl.protocol_tlsv1¶OP_NO_SSLv3

Chọn TLS phiên bản 1.0 làm giao thức mã hóa kênh.

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
86.

Phiên bản SSL 3 không an toàn. Việc sử dụng nó rất nản lòng.SSLv3 is deprecated

ssl.protocol_tlsv1¶OP_NO_TLSv1

Chọn TLS phiên bản 1.0 làm giao thức mã hóa kênh.

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
86.

Phiên bản SSL 3 không an toàn. Việc sử dụng nó rất nản lòng.OP_NO_TLSv1_1

ssl.protocol_tlsv1¶

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
86.

Phiên bản SSL 3 không an toàn. Việc sử dụng nó rất nản lòng.The option is deprecated since OpenSSL 1.1.0.

ssl.protocol_tlsv1¶OP_NO_TLSv1_2

Chọn TLS phiên bản 1.0 làm giao thức mã hóa kênh.

Giao thức này không có sẵn nếu OpenSSL được biên dịch với tùy chọn

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
86.

Phiên bản SSL 3 không an toàn. Việc sử dụng nó rất nản lòng.The option is deprecated since OpenSSL 1.1.0.

ssl.protocol_tlsv1¶OP_NO_TLSv1_3

Chọn TLS phiên bản 1.0 làm giao thức mã hóa kênh.

Không dùng nữa kể từ phiên bản 3.6: OpenSSL đã phản đối tất cả các giao thức cụ thể phiên bản.

ssl.protocol_tlsv1_1¶The option is deprecated since OpenSSL 1.1.0. It was added to 2.7.15, 3.6.3 and 3.7.0 for backwards compatibility with OpenSSL 1.0.2.

Chọn TLS phiên bản 1.1 làm giao thức mã hóa kênh. Chỉ có sẵn với OpenSSL phiên bản 1.0.1+.OP_NO_RENEGOTIATION

Mới trong phiên bản 3.4.

ssl.protocol_tlsv1_2¶

Không dùng nữa kể từ phiên bản 3.6: OpenSSL đã phản đối tất cả các giao thức cụ thể phiên bản.

ssl.protocol_tlsv1_1¶OP_CIPHER_SERVER_PREFERENCE

Chọn TLS phiên bản 1.1 làm giao thức mã hóa kênh. Chỉ có sẵn với OpenSSL phiên bản 1.0.1+.

Mới trong phiên bản 3.4.

ssl.protocol_tlsv1_2¶OP_SINGLE_DH_USE

Chọn TLS phiên bản 1.2 làm giao thức mã hóa kênh. Chỉ có sẵn với OpenSSL phiên bản 1.0.1+.

Mới trong phiên bản 3.4.

ssl.protocol_tlsv1_2¶OP_SINGLE_ECDH_USE

Chọn TLS phiên bản 1.2 làm giao thức mã hóa kênh. Chỉ có sẵn với OpenSSL phiên bản 1.0.1+.

Mới trong phiên bản 3.3.

ssl.op_enable_middlebox_compat¶OP_ENABLE_MIDDLEBOX_COMPAT

Gửi thông báo thay đổi giả thông (CCS) trong TLS 1.3 Handshake để làm cho kết nối TLS 1.3 trông giống như kết nối TLS 1.2.

Tùy chọn này chỉ có sẵn với OpenSSL 1.1.1 trở lên.

Mới trong phiên bản 3.8.

ssl.op_no_compression¶OP_NO_COMPRESSION

Tắt nén trên kênh SSL. Điều này rất hữu ích nếu giao thức ứng dụng hỗ trợ sơ đồ nén của chính nó.

Mới trong phiên bản 3.3.

classSSSSL.Options¶ssl.Options

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
78 Bộ sưu tập hằng số op_*.

ssl.op_no_ticket¶OP_NO_TICKET

Ngăn chặn phía khách hàng yêu cầu một vé phiên.

Mới trong phiên bản 3.6.

ssl.op_ignore_unexpected_eof¶OP_IGNORE_UNEXPECTED_EOF

Bỏ qua việc tắt máy kết nối TLS bất ngờ.

Tùy chọn này chỉ có sẵn với OpenSSL 3.0.0 trở lên.

Mới trong phiên bản 3.10.

ssl.has_alpn¶HAS_ALPN

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho phần mở rộng TLS đàm phán giao thức lớp ứng dụng như được mô tả trong RFC 7301 hay không.RFC 7301.

Mới trong phiên bản 3.5.

ssl.has_never_check_common_name¶HAS_NEVER_CHECK_COMMON_NAME

Liệu thư viện OpenSSL có hỗ trợ tích hợp không kiểm tra tên chung hay không và

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
95 có thể ghi hay không.

Mới trong phiên bản 3.7.

ssl.has_ecdh¶HAS_ECDH

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho trao đổi khóa Diffie-Hellman dựa trên đường cong hình elip hay không. Điều này phải đúng trừ khi tính năng bị vô hiệu hóa rõ ràng bởi nhà phân phối.

Mới trong phiên bản 3.3.

ssl.has_sni¶HAS_SNI

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho tiện ích mở rộng chỉ báo tên máy chủ hay không (như được định nghĩa trong RFC 6066).RFC 6066).

Mới trong phiên bản 3.2.

ssl.has_npn¶HAS_NPN

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho cuộc đàm phán giao thức tiếp theo như được mô tả trong đàm phán giao thức lớp ứng dụng hay không. Khi đúng, bạn có thể sử dụng phương thức

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
96 để quảng cáo giao thức nào bạn muốn hỗ trợ.

Mới trong phiên bản 3.3.

ssl.has_sslv2¶HAS_SSLv2

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho giao thức SSL 2.0 hay không.

Mới trong phiên bản 3.7.

ssl.has_ecdh¶HAS_SSLv3

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho trao đổi khóa Diffie-Hellman dựa trên đường cong hình elip hay không. Điều này phải đúng trừ khi tính năng bị vô hiệu hóa rõ ràng bởi nhà phân phối.

Mới trong phiên bản 3.7.

ssl.has_ecdh¶HAS_TLSv1

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho trao đổi khóa Diffie-Hellman dựa trên đường cong hình elip hay không. Điều này phải đúng trừ khi tính năng bị vô hiệu hóa rõ ràng bởi nhà phân phối.

Mới trong phiên bản 3.7.

ssl.has_ecdh¶HAS_TLSv1_1

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho trao đổi khóa Diffie-Hellman dựa trên đường cong hình elip hay không. Điều này phải đúng trừ khi tính năng bị vô hiệu hóa rõ ràng bởi nhà phân phối.

Mới trong phiên bản 3.7.

ssl.has_ecdh¶HAS_TLSv1_2

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho trao đổi khóa Diffie-Hellman dựa trên đường cong hình elip hay không. Điều này phải đúng trừ khi tính năng bị vô hiệu hóa rõ ràng bởi nhà phân phối.

Mới trong phiên bản 3.7.

ssl.has_ecdh¶HAS_TLSv1_3

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho trao đổi khóa Diffie-Hellman dựa trên đường cong hình elip hay không. Điều này phải đúng trừ khi tính năng bị vô hiệu hóa rõ ràng bởi nhà phân phối.

Mới trong phiên bản 3.7.

ssl.has_ecdh¶CHANNEL_BINDING_TYPES

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho trao đổi khóa Diffie-Hellman dựa trên đường cong hình elip hay không. Điều này phải đúng trừ khi tính năng bị vô hiệu hóa rõ ràng bởi nhà phân phối.

Mới trong phiên bản 3.3.

ssl.has_sni¶OPENSSL_VERSION

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho tiện ích mở rộng chỉ báo tên máy chủ hay không (như được định nghĩa trong RFC 6066).

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2k  26 Jan 2017'

Mới trong phiên bản 3.2.

ssl.has_npn¶OPENSSL_VERSION_INFO

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho cuộc đàm phán giao thức tiếp theo như được mô tả trong đàm phán giao thức lớp ứng dụng hay không. Khi đúng, bạn có thể sử dụng phương thức

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
96 để quảng cáo giao thức nào bạn muốn hỗ trợ.

>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)

Mới trong phiên bản 3.2.

ssl.has_npn¶OPENSSL_VERSION_NUMBER

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho cuộc đàm phán giao thức tiếp theo như được mô tả trong đàm phán giao thức lớp ứng dụng hay không. Khi đúng, bạn có thể sử dụng phương thức

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
96 để quảng cáo giao thức nào bạn muốn hỗ trợ.

>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'

Mới trong phiên bản 3.2.

ssl.has_npn¶ALERT_DESCRIPTION_HANDSHAKE_FAILUREssl.ALERT_DESCRIPTION_INTERNAL_ERRORALERT_DESCRIPTION_*

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho cuộc đàm phán giao thức tiếp theo như được mô tả trong đàm phán giao thức lớp ứng dụng hay không. Khi đúng, bạn có thể sử dụng phương thức

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
96 để quảng cáo giao thức nào bạn muốn hỗ trợ.RFC 5246 and others. The IANA TLS Alert Registry contains this list and references to the RFCs where their meaning is defined.

ssl.has_sslv2¶

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho giao thức SSL 2.0 hay không.

ssl.has_sslv3¶ssl.AlertDescription

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho giao thức SSL 3.0 hay không.

Mới trong phiên bản 3.6.

ssl.op_ignore_unexpected_eof¶SERVER_AUTH

Bỏ qua việc tắt máy kết nối TLS bất ngờ.

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho giao thức SSL 2.0 hay không.

ssl.has_sslv3¶CLIENT_AUTH

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho giao thức SSL 3.0 hay không.

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho giao thức SSL 2.0 hay không.

ssl.has_sslv3¶ ssl.SSLErrorNumber

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho giao thức SSL 3.0 hay không.

Mới trong phiên bản 3.6.

ssl.op_ignore_unexpected_eof¶ ssl.TLSVersion

Bỏ qua việc tắt máy kết nối TLS bất ngờ.

Mới trong phiên bản 3.7.

ssl.has_ecdh¶MINIMUM_SUPPORTEDTLSVersion.MAXIMUM_SUPPORTED

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho trao đổi khóa Diffie-Hellman dựa trên đường cong hình elip hay không. Điều này phải đúng trừ khi tính năng bị vô hiệu hóa rõ ràng bởi nhà phân phối.

ssl.has_sni¶SSLv3TLSVersion.TLSv1TLSVersion.TLSv1_1TLSVersion.TLSv1_2TLSVersion.TLSv1_3

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho tiện ích mở rộng chỉ báo tên máy chủ hay không (như được định nghĩa trong RFC 6066).

Mới trong phiên bản 3.2.

ssl.has_npn¶ssl.SSLSocket(socket.socket)

Liệu thư viện OpenSSL có hỗ trợ tích hợp cho cuộc đàm phán giao thức tiếp theo như được mô tả trong đàm phán giao thức lớp ứng dụng hay không. Khi đúng, bạn có thể sử dụng phương thức

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
96 để quảng cáo giao thức nào bạn muốn hỗ trợ.Socket Objects:

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    08

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    09

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    10

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    11

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    12

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    13

  • ssl.has_sslv2¶

  • Liệu thư viện OpenSSL có hỗ trợ tích hợp cho giao thức SSL 2.0 hay không.

  • ssl.has_sslv3¶

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    21

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    22

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    23,
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    24 (nhưng không được phép đối số không khác
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    25)

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    26,
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    27 (có cùng giới hạn)

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    28 (nhưng
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    29 sẽ chỉ được sử dụng cho các ổ cắm văn bản đơn giản, nếu không
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    26 sẽ được sử dụng)

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    31

Tuy nhiên, do giao thức SSL (và TLS) có khung riêng của TCP, nên sự trừu tượng của SSL ổ cắm có thể, một số khía cạnh, có thể chuyển hướng từ đặc điểm kỹ thuật của ổ cắm cấp độ OS bình thường. Xem đặc biệt các ghi chú trên ổ cắm không chặn.notes on non-blocking sockets.

Các phiên bản của

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4 phải được tạo bằng phương pháp
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1.

Đã thay đổi trong phiên bản 3.5: Phương pháp

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
28 đã được thêm vào.The
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
28 method was added.

Đã thay đổi trong phiên bản 3.5:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
31 không đặt lại thời gian chờ ổ cắm mỗi lần được nhận hoặc gửi. Thời gian chờ ổ cắm hiện nay là tổng thời gian tắt tối đa.The
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
31 does not reset the socket timeout each time bytes are received or sent. The socket timeout is now to maximum total duration of the shutdown.

Đã không dùng từ Phiên bản 3.6: Không dùng để tạo phiên bản

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4 trực tiếp, sử dụng
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1 để bọc ổ cắm.It is deprecated to create a
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4 instance directly, use
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1 to wrap a socket.

Đã thay đổi trong phiên bản 3.7:

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4 phải được tạo bằng
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6. Trong các phiên bản trước, có thể tạo các trường hợp trực tiếp. Điều này chưa bao giờ được ghi nhận hoặc chính thức được hỗ trợ.
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4 instances must to created with
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6. In earlier versions, it was possible to create instances directly. This was never documented or officially supported.

Đã thay đổi trong phiên bản 3.10: Python hiện sử dụng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
40 và
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
41 trong nội bộ. Các chức năng hỗ trợ đọc và ghi dữ liệu lớn hơn 2 GB. Viết dữ liệu có độ dài không còn thất bại với lỗi vi phạm giao thức.Python now uses
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
40 and
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
41 internally. The functions support reading and writing of data larger than 2 GB. Writing zero-length data no longer fails with a protocol violation error.

Các ổ cắm SSL cũng có các phương thức và thuộc tính bổ sung sau:

Sslsocket.read (len = 1024, buffer = none) ¶read(len=1024, buffer=None)

Đọc lên đến LEN byte dữ liệu từ ổ cắm SSL và trả về kết quả dưới dạng ví dụ

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
42. Nếu bộ đệm được chỉ định, sau đó đọc vào bộ đệm thay thế và trả về số byte đọc.

Tăng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
43 hoặc
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
44 nếu ổ cắm không chặn và đọc sẽ chặn.non-blocking and the read would block.

Vì bất cứ lúc nào cũng có thể đàm phán lại, một cuộc gọi đến

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
45 cũng có thể gây ra các hoạt động ghi.

Đã thay đổi trong phiên bản 3.5: Thời gian chờ ổ cắm không còn đặt lại mỗi lần byte được nhận hoặc gửi. Thời gian chờ ổ cắm hiện nay là tổng thời lượng tối đa để đọc lên đến LEN byte.The socket timeout is no more reset each time bytes are received or sent. The socket timeout is now to maximum total duration to read up to len bytes.

Không dùng nữa kể từ phiên bản 3.6: Sử dụng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
23 thay vì
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
45.Use
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
23 instead of
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
45.

SSLSocket.Write (BUF) ¶write(buf)

Viết BUF vào ổ cắm SSL và trả về số byte được viết. Đối số BUF phải là một đối tượng hỗ trợ giao diện bộ đệm.

Tăng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
43 hoặc
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
44 nếu ổ cắm không chặn và việc ghi sẽ chặn.non-blocking and the write would block.

Vì bất cứ lúc nào cũng có thể đàm phán lại, một cuộc gọi đến

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
50 cũng có thể gây ra các hoạt động đọc.

Đã thay đổi trong phiên bản 3.5: Thời gian chờ ổ cắm không còn đặt lại mỗi lần byte được nhận hoặc gửi. Thời gian chờ ổ cắm hiện là tổng thời lượng tối đa để viết BUF.The socket timeout is no more reset each time bytes are received or sent. The socket timeout is now to maximum total duration to write buf.

Không dùng nữa kể từ phiên bản 3.6: Sử dụng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
26 thay vì
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
50.Use
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
26 instead of
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
50.

Ghi chú

Các phương pháp

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
45 và
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
50 là các phương pháp cấp thấp đọc và ghi dữ liệu không được mã hóa, cấp độ ứng dụng và giải mã/mã hóa nó thành dữ liệu cấp độ, được mã hóa. Các phương pháp này yêu cầu kết nối SSL hoạt động, tức là cái bắt tay đã được hoàn thành và
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
55 không được gọi.

Thông thường, bạn nên sử dụng các phương thức API ổ cắm như

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
23 và
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
26 thay vì các phương thức này.

Sslsocket.do_handshake () ¶do_handshake()

Thực hiện bắt tay thiết lập SSL.

Đã thay đổi trong phiên bản 3.5: Thời gian chờ ổ cắm không còn đặt lại mỗi lần byte được nhận hoặc gửi. Thời gian chờ ổ cắm hiện nay là tổng thời lượng tối đa của bắt tay.The socket timeout is no more reset each time bytes are received or sent. The socket timeout is now to maximum total duration of the handshake.

Đã thay đổi trong phiên bản 3.7: Tên máy chủ hoặc địa chỉ IP được OpenSSL khớp trong quá trình bắt tay. Hàm

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
58 không còn được sử dụng. Trong trường hợp OpenSSL từ chối tên máy chủ hoặc địa chỉ IP, cái bắt tay bị hủy bỏ sớm và thông báo cảnh báo TLS được gửi đến ngang hàng.Hostname or IP address is matched by OpenSSL during handshake. The function
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
58 is no longer used. In case OpenSSL refuses a hostname or IP address, the handshake is aborted early and a TLS alert message is send to the peer.

Sslsocket.getpeercert (Binary_form = false) ¶getpeercert(binary_form=False)

Nếu không có chứng chỉ cho người ngang hàng ở đầu kia của kết nối, hãy trả về

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2. Nếu cái bắt tay SSL vẫn chưa được thực hiện, hãy tăng
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
60.

Nếu tham số

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
61 là
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9 và chứng chỉ được nhận từ ngang hàng, phương thức này sẽ trả về một ví dụ
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
63. Nếu chứng chỉ không được xác nhận, Dict là trống. Nếu chứng chỉ được xác thực, nó sẽ trả về một dict với một số khóa, trong số đó
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
64 (hiệu trưởng mà chứng chỉ được cấp) và
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
65 (hiệu trưởng cấp chứng chỉ). Nếu chứng chỉ chứa một thể hiện của tiện ích mở rộng tên thay thế chủ đề (xem RFC 3280), cũng sẽ có khóa
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
66 trong từ điển.RFC 3280), there will also be a
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
66 key in the dictionary.

Các trường

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
64 và
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
65 là các bộ dữ liệu chứa chuỗi các tên phân biệt tương đối (RDN) được đưa ra trong cấu trúc dữ liệu của chứng chỉ cho các trường tương ứng và mỗi RDN là một chuỗi các cặp giá trị tên. Đây là một ví dụ trong thế giới thực:

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
0

Ghi chú

Để xác thực chứng chỉ cho một dịch vụ cụ thể, bạn có thể sử dụng chức năng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
58.

Nếu tham số

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
61 là
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
5 và chứng chỉ được cung cấp, phương thức này sẽ trả về dạng mã hóa der của toàn bộ chứng chỉ dưới dạng chuỗi byte hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 nếu người ngang hàng không cung cấp chứng chỉ. Việc ngang hàng có cung cấp chứng chỉ hay không phụ thuộc vào vai trò của ổ cắm SSL:

  • Đối với ổ cắm SSL của máy khách, máy chủ sẽ luôn cung cấp chứng chỉ, bất kể cần xác thực;

  • Đối với ổ cắm SSL của máy chủ, máy khách sẽ chỉ cung cấp chứng chỉ khi được máy chủ yêu cầu; Do đó,

    ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    8 sẽ trả về
    >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    2 nếu bạn đã sử dụng
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    75 (thay vì
    hostname = 'www.python.org'
    # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_verify_locations('path/to/cabundle.pem')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    
    52 hoặc
    >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    9).

Đã thay đổi trong phiên bản 3.2: Từ điển được trả lại bao gồm các mục bổ sung như

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
65 và
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
79.The returned dictionary includes additional items such as
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
65 and
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
79.

Đã thay đổi trong phiên bản 3.4:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
60 được nâng lên khi bắt tay được thực hiện. Từ điển được trả lại bao gồm các mục mở rộng x509v3 bổ sung như
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
81,
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
82 và
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
83 URI.
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
60 is raised when the handshake isn’t done. The returned dictionary includes additional X509v3 extension items such as
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
81,
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
82 and
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
83 URIs.

Đã thay đổi trong phiên bản 3.9: Chuỗi địa chỉ IPv6 không còn có dòng mới.IPv6 address strings no longer have a trailing new line.

Sslsocket.code ()cipher()

Trả về một tuple ba giá trị chứa tên của mật mã đang được sử dụng, phiên bản của giao thức SSL xác định việc sử dụng nó và số lượng bit bí mật đang được sử dụng. Nếu không có kết nối nào được thiết lập, trả về

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2.

Sslsocket.shared_ciphers () ¶shared_ciphers()

Trả về danh sách các mật mã được khách hàng chia sẻ trong thời gian bắt tay. Mỗi mục của danh sách trả về là một bộ ba giá trị chứa tên của mật mã, phiên bản của giao thức SSL xác định việc sử dụng nó và số lượng bit bí mật mà mật mã sử dụng.

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
85 Trả về
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 Nếu không có kết nối nào được thiết lập hoặc ổ cắm là ổ cắm của máy khách.

Mới trong phiên bản 3.5.

Sslsocket.compression ()compression()

Trả về thuật toán nén đang được sử dụng làm chuỗi hoặc

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 nếu kết nối không được nén.

Nếu giao thức cấp cao hơn hỗ trợ cơ chế nén của chính nó, bạn có thể sử dụng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
88 để vô hiệu hóa nén cấp độ SSL.

Mới trong phiên bản 3.3.

Sslsocket.get_channel_binding (cb_type = 'tls-unique') ¶get_channel_binding(cb_type='tls-unique')

Nhận dữ liệu liên kết kênh cho kết nối hiện tại, dưới dạng đối tượng byte. Trả về

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 nếu không được kết nối hoặc cái bắt tay chưa được hoàn thành.

Tham số CB_TYPE cho phép lựa chọn loại liên kết kênh mong muốn. Các loại liên kết kênh hợp lệ được liệt kê trong danh sách

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
90. Hiện tại chỉ có liên kết kênh ‘TLS-Unique, được xác định bởi RFC 5929, được hỗ trợ.
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
60 sẽ được nâng lên nếu một loại ràng buộc kênh không được hỗ trợ được yêu cầu.RFC 5929, is supported.
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
60 will be raised if an unsupported channel binding type is requested.

Mới trong phiên bản 3.3.

Sslsocket.get_channel_binding (cb_type = 'tls-unique') ¶selected_alpn_protocol()

Nhận dữ liệu liên kết kênh cho kết nối hiện tại, dưới dạng đối tượng byte. Trả về

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 nếu không được kết nối hoặc cái bắt tay chưa được hoàn thành.

Mới trong phiên bản 3.5.

Sslsocket.compression ()selected_npn_protocol()

Trả về thuật toán nén đang được sử dụng làm chuỗi hoặc

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 nếu kết nối không được nén.

Mới trong phiên bản 3.3.

Sslsocket.get_channel_binding (cb_type = 'tls-unique') ¶NPN has been superseded by ALPN

Nhận dữ liệu liên kết kênh cho kết nối hiện tại, dưới dạng đối tượng byte. Trả về
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 nếu không được kết nối hoặc cái bắt tay chưa được hoàn thành.
unwrap()

Tham số CB_TYPE cho phép lựa chọn loại liên kết kênh mong muốn. Các loại liên kết kênh hợp lệ được liệt kê trong danh sách

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
90. Hiện tại chỉ có liên kết kênh ‘TLS-Unique, được xác định bởi RFC 5929, được hỗ trợ.
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
60 sẽ được nâng lên nếu một loại ràng buộc kênh không được hỗ trợ được yêu cầu.

Sslsocket.selected_alpn_protocol () ¶verify_client_post_handshake()

Trả về giao thức đã được chọn trong thời gian bắt tay TLS. Nếu

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
92 không được gọi, nếu bên kia không hỗ trợ ALPN, nếu ổ cắm này không hỗ trợ bất kỳ giao thức nào của khách hàng, hoặc nếu cái bắt tay chưa xảy ra,
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 sẽ được trả lại.

Sslsocket.selected_npn_protocol () ¶

Trả về giao thức cấp cao hơn đã được chọn trong thời gian bắt tay TLS/SSL. Nếu

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
96 không được gọi, hoặc nếu bên kia không hỗ trợ NPN hoặc nếu cái bắt tay chưa xảy ra, điều này sẽ trả lại
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2.

Ghi chú

Không dùng nữa kể từ phiên bản 3.10: NPN đã được thay thế bởi ALPN

Sslsocket.unwrap ()

Thực hiện bắt tay tắt SSL, loại bỏ lớp TLS khỏi ổ cắm bên dưới và trả về đối tượng ổ cắm bên dưới. Điều này có thể được sử dụng để đi từ hoạt động được mã hóa qua kết nối với không được mã hóa. Ổ cắm được trả về phải luôn được sử dụng để liên lạc thêm với phía bên kia của kết nối, thay vì ổ cắm ban đầu.version()

Sslsocket.verify_client_post_handshake () ¶

Mới trong phiên bản 3.5.

Sslsocket.pends () ¶pending()

Trả về số lượng byte đã được giải mã có sẵn để đọc, đang chờ kết nối.

SSLSocket.Context¶context

Đối tượng

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3 ổ cắm SSL này được gắn với. Nếu ổ cắm SSL được tạo bằng hàm
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6 không dùng (chứ không phải
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1), thì đây là đối tượng bối cảnh tùy chỉnh được tạo cho ổ cắm SSL này.

Mới trong phiên bản 3.2.

Sslsocket.server_side¶server_side

Một boolean là

>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
5 cho ổ cắm phía máy chủ và
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9 cho ổ cắm phía máy khách.

Mới trong phiên bản 3.2.

Sslsocket.server_side¶server_hostname

Một boolean là

>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
5 cho ổ cắm phía máy chủ và
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9 cho ổ cắm phía máy khách.

Mới trong phiên bản 3.2.

Sslsocket.server_side¶The attribute is now always ASCII text. When

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
12 is an internationalized domain name (IDN), this attribute now stores the A-label form (
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
13), rather than the U-label form (
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
14).

Một boolean là
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
5 cho ổ cắm phía máy chủ và
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9 cho ổ cắm phía máy khách.
session

Sslsocket.server_hostname¶

Tên máy chủ của máy chủ: Loại

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
10 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 cho ổ cắm phía máy chủ hoặc nếu tên máy chủ không được chỉ định trong hàm tạo.

Đã thay đổi trong phiên bản 3.7: Thuộc tính bây giờ luôn luôn là văn bản ASCII. Khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
12 là một tên miền quốc tế hóa (IDN), thuộc tính này hiện lưu trữ biểu mẫu A-Label (
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
13), thay vì dạng nhãn U (
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
14).
session_reused

Tên máy chủ của máy chủ: Loại

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
10 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 cho ổ cắm phía máy chủ hoặc nếu tên máy chủ không được chỉ định trong hàm tạo.

Đã thay đổi trong phiên bản 3.7: Thuộc tính bây giờ luôn luôn là văn bản ASCII. Khi ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv3 12 là một tên miền quốc tế hóa (IDN), thuộc tính này hiện lưu trữ biểu mẫu A-Label (ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv3 13), thay vì dạng nhãn U (ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv3 14).

Mới trong phiên bản 3.2.

Sslsocket.server_side¶

Một boolean là
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
5 cho ổ cắm phía máy chủ và
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9 cho ổ cắm phía máy khách.
ssl.SSLContext(protocol=None)

Sslsocket.server_hostname¶

Tên máy chủ của máy chủ: Loại

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
10 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 cho ổ cắm phía máy chủ hoặc nếu tên máy chủ không được chỉ định trong hàm tạo.

Đã thay đổi trong phiên bản 3.7: Thuộc tính bây giờ luôn luôn là văn bản ASCII. Khi

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
12 là một tên miền quốc tế hóa (IDN), thuộc tính này hiện lưu trữ biểu mẫu A-Label (
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
13), thay vì dạng nhãn U (
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
14).server

SSLv2

SSLv3

Sslsocket.session¶ 3

TLSv1

TLSv1.1

TLSv1.2

SSLv2

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

Mới trong phiên bản 3.6.

Sslsocket.session_reuse¶

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

SSLv3

Mới trong phiên bản 3.6.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

Sslsocket.session_reuse¶

Sslsocket.session_reuse¶

Mới trong phiên bản 3.6.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

TLSv1

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

TLSv1.1

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

Mới trong phiên bản 3.6.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

Mới trong phiên bản 3.6.

TLSv1.2

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

Mới trong phiên bản 3.6.

Mới trong phiên bản 3.6.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
15 cho kết nối SSL này. Phiên này có sẵn cho các ổ cắm phía máy khách và máy chủ sau khi bắt tay TLS đã được thực hiện. Đối với ổ cắm máy khách, phiên có thể được đặt trước khi
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
16 được gọi để sử dụng lại một phiên.

Mới trong phiên bản 3.6.

1(1,2)(1,2)

Sslsocket.session_reuse¶

2(1,2)(1,2)

Bối cảnh SSL

3(1,2)(1,2)

Bối cảnh SSL chứa các dữ liệu khác nhau tồn tại lâu hơn so với các kết nối SSL đơn, chẳng hạn như tùy chọn cấu hình SSL, chứng chỉ và khóa riêng. Nó cũng quản lý bộ nhớ cache của các phiên SSL cho các ổ cắm phía máy chủ, để tăng tốc các kết nối lặp đi lặp lại từ cùng một máy khách.

classSSSL.SSLContext (giao thức = none) ¶The default cipher suites now include only secure AES and ChaCha20 ciphers with forward secrecy and security level 2. RSA and DH keys with less than 2048 bits and ECC keys with less than 224 bits are prohibited.

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
09,
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3, and
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
4 use TLS 1.2 as minimum TLS version.

Tạo bối cảnh SSL mới. Bạn có thể vượt qua giao thức phải là một trong các hằng số

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
17 được xác định trong mô -đun này. Tham số chỉ định phiên bản nào của giao thức SSL để sử dụng. Thông thường, máy chủ chọn một phiên bản giao thức cụ thể và máy khách phải thích ứng với sự lựa chọn của máy chủ. Hầu hết các phiên bản không thể tương tác với các phiên bản khác. Nếu không được chỉ định, mặc định là
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
09; Nó cung cấp khả năng tương thích nhất với các phiên bản khác.

Ở đây, một bảng hiển thị phiên bản nào trong máy khách (phía dưới bên) có thể kết nối với phiên bản nào trong máy chủ (dọc theo đầu):cert_store_stats()

Máy khách / Máy chủ

TLS 3

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
1

Vâng

khôngload_cert_chain(certfile, keyfile=None, password=None)

Không 1Certificates for more information on how the certificate is stored in the certfile.

Không 2

TLS (SSLV23) 3

Một

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 được nâng lên nếu khóa riêng không phù hợp với chứng chỉ.

Đã thay đổi trong phiên bản 3.3: Mật khẩu đối số tùy chọn mới.New optional argument password.

SslContext.load_default_certs (urimed = purda.server_auth) ¶load_default_certs(purpose=Purpose.SERVER_AUTH)

Tải một bộ chứng chỉ chứng nhận mặc định của người Viking (CA) từ các vị trí mặc định. Trên Windows, nó tải CA Certs từ các cửa hàng hệ thống

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
20 và
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
21. Trên tất cả các hệ thống, nó gọi
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
10. Trong tương lai, phương thức cũng có thể tải chứng chỉ CA từ các vị trí khác.

Cờ mục đích chỉ định loại chứng chỉ CA nào được tải. Các cài đặt mặc định

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
32 Chứng chỉ tải, được gắn cờ và tin cậy cho xác thực máy chủ web TLS (ổ cắm phía máy khách).
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
33 Tải chứng chỉ CA để xác minh chứng chỉ máy khách ở phía máy chủ.

Mới trong phiên bản 3.4.

SslContext.load_verify_locations (CAFILE = none, capath = none, cadata = none) ¶load_verify_locations(cafile=None, capath=None, cadata=None)

Tải một tập hợp các chứng chỉ của Cơ quan chứng nhận (CA) (CA) được sử dụng để xác nhận các chứng chỉ đồng nghiệp khác khi

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
8 không phải là
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75. Ít nhất một trong số Cafile hoặc Capath phải được chỉ định.

Phương pháp này cũng có thể tải Danh sách thu hồi chứng nhận (CRLS) ở định dạng PEM hoặc DER. Để sử dụng CRLS,

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
70 phải được cấu hình đúng.

Chuỗi CAFILE, nếu có, là đường dẫn đến một tệp chứng chỉ CA được nối ở định dạng PEM. Xem thảo luận về chứng chỉ để biết thêm thông tin về cách sắp xếp các chứng chỉ trong tệp này.Certificates for more information about how to arrange the certificates in this file.

Chuỗi Capath, nếu có, là đường dẫn đến một thư mục chứa một số chứng chỉ CA ở định dạng PEM, theo bố cục cụ thể của OpenSSL.

Đối tượng CADATA, nếu có, là chuỗi ASCII của một hoặc nhiều chứng chỉ được mã hóa PEM hoặc đối tượng giống như byte của các chứng chỉ được mã hóa DER. Giống như với các dòng Capath thêm xung quanh các chứng chỉ được mã hóa PEM bị bỏ qua nhưng ít nhất một chứng chỉ phải có.bytes-like object of DER-encoded certificates. Like with capath extra lines around PEM-encoded certificates are ignored but at least one certificate must be present.

Thay đổi trong phiên bản 3.4: Cadata đối số tùy chọn mớiNew optional argument cadata

SslContext.get_ca_certs (binary_form = false) ¶get_ca_certs(binary_form=False)

Nhận một danh sách các chứng chỉ chứng nhận được tải trên mạng (CA). Nếu tham số

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
61 là
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9, mỗi mục nhập danh sách là một chế độ giống như đầu ra của
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
3. Mặt khác, phương thức trả về một danh sách các chứng chỉ được mã hóa der. Danh sách được trả lại không chứa chứng chỉ từ Capath trừ khi chứng chỉ được yêu cầu và tải bởi kết nối SSL.

Ghi chú

Giấy chứng nhận trong thư mục Capath aren được tải trừ khi chúng được sử dụng ít nhất một lần.

Mới trong phiên bản 3.4.

SslContext.load_verify_locations (CAFILE = none, capath = none, cadata = none) ¶get_ciphers()

Tải một tập hợp các chứng chỉ của Cơ quan chứng nhận (CA) (CA) được sử dụng để xác nhận các chứng chỉ đồng nghiệp khác khi

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
8 không phải là
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75. Ít nhất một trong số Cafile hoặc Capath phải được chỉ định.

Example:

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
2

Phương pháp này cũng có thể tải Danh sách thu hồi chứng nhận (CRLS) ở định dạng PEM hoặc DER. Để sử dụng CRLS,

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
70 phải được cấu hình đúng.

Chuỗi CAFILE, nếu có, là đường dẫn đến một tệp chứng chỉ CA được nối ở định dạng PEM. Xem thảo luận về chứng chỉ để biết thêm thông tin về cách sắp xếp các chứng chỉ trong tệp này.set_default_verify_paths()

Chuỗi Capath, nếu có, là đường dẫn đến một thư mục chứa một số chứng chỉ CA ở định dạng PEM, theo bố cục cụ thể của OpenSSL.

Đối tượng CADATA, nếu có, là chuỗi ASCII của một hoặc nhiều chứng chỉ được mã hóa PEM hoặc đối tượng giống như byte của các chứng chỉ được mã hóa DER. Giống như với các dòng Capath thêm xung quanh các chứng chỉ được mã hóa PEM bị bỏ qua nhưng ít nhất một chứng chỉ phải có.set_ciphers(ciphers)

Thay đổi trong phiên bản 3.4: Cadata đối số tùy chọn mới

Ghi chú

Giấy chứng nhận trong thư mục Capath aren được tải trừ khi chúng được sử dụng ít nhất một lần.

SslContext.get_ciphers () ¶

Nhận một danh sách các mật mã được kích hoạt. Danh sách là theo thứ tự ưu tiên mật mã. Xem
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
41.
set_alpn_protocols(protocols)

Mới trong phiên bản 3.6.RFC 7301. After a successful handshake, the

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
45 method will return the agreed-upon protocol.

SslContext.set_default_verify_paths () ¶

Tải một tập hợp các chứng chỉ chứng nhận mặc định của người Viking (CA) từ đường dẫn hệ thống tập tin được xác định khi xây dựng thư viện OpenSSL. Thật không may, không có cách nào dễ dàng để biết liệu phương pháp này có thành công hay không: không có lỗi nào được trả lại nếu không có chứng chỉ nào được tìm thấy. Tuy nhiên, khi thư viện OpenSSL được cung cấp như một phần của hệ điều hành, nó có khả năng được cấu hình đúng.

SslContext.set_ciphers (mật mã) ¶set_npn_protocols(protocols)

Đặt các mật mã có sẵn cho các ổ cắm được tạo với bối cảnh này. Nó phải là một chuỗi trong định dạng danh sách mật mã OpenSSL. Nếu không có mật mã nào có thể được chọn (vì các tùy chọn thời gian biên dịch hoặc cấu hình khác cấm sử dụng tất cả các mật mã được chỉ định), một

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
9 sẽ được nâng lên.

Khi được kết nối, phương thức

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
42 của ổ cắm SSL sẽ cung cấp mật mã hiện được chọn.

Các bộ mật mã TLS 1.3 không thể bị vô hiệu hóa với

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
43.

SslContext.set_alpn_protocols (giao thức) ¶NPN has been superseded by ALPN

Chỉ định giao thức nào ổ cắm nên quảng cáo trong thời gian bắt tay SSL/TLS. Nó phải là một danh sách các chuỗi ASCII, như
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
44, được đặt hàng theo sở thích. Việc lựa chọn một giao thức sẽ xảy ra trong thời gian bắt tay và sẽ diễn ra theo RFC 7301. Sau khi bắt tay thành công, phương pháp
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
45 sẽ trả về giao thức đã thỏa thuận.
sni_callback

Phương pháp này sẽ tăng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
98 nếu
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
47 là
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9.RFC 6066 section 3 - Server Name Indication.

Chỉ có thể đặt lại một cuộc gọi lại trên mỗi

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3. Nếu SNI_Callback được đặt thành
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 thì cuộc gọi lại bị tắt. Gọi chức năng này một thời gian tiếp theo sẽ vô hiệu hóa cuộc gọi lại đã đăng ký trước đó.

Hàm gọi lại sẽ được gọi với ba đối số; Đầu tiên là

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
6, thứ hai là một chuỗi đại diện cho tên máy chủ mà máy khách đang có ý định giao tiếp (hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 nếu máy khách TLS Hello không chứa tên máy chủ) và đối số thứ ba là
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3 ban đầu. Đối số tên máy chủ là văn bản. Đối với tên miền quốc tế hóa, tên máy chủ là nhãn A IDN (
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
13).

Một cách sử dụng điển hình của cuộc gọi lại này là thay đổi thuộc tính ____ 36 ____ ____361 thành một đối tượng mới của loại

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3 đại diện cho chuỗi chứng chỉ phù hợp với tên máy chủ.

Do giai đoạn đàm phán sớm của kết nối TLS, chỉ các phương thức và thuộc tính hạn chế có thể sử dụng được như

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
45 và
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
61. Các phương thức
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
3,
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
42 và
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
67 yêu cầu kết nối TLS đã tiến triển ngoài ứng dụng khách TLS Hello và do đó sẽ không trả về các giá trị có ý nghĩa cũng như không thể được gọi là an toàn.

Hàm SNI_Callback phải trả về

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
2 để cho phép đàm phán TLS tiếp tục. Nếu yêu cầu lỗi TLS, có thể trả về hằng số
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
69. Các giá trị trả về khác sẽ dẫn đến lỗi TLS gây tử vong với
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
70.

Nếu một ngoại lệ được nâng lên từ hàm SNI_Callback, kết nối TLS sẽ chấm dứt với thông báo cảnh báo TLS gây tử vong

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
71.

Phương pháp này sẽ tăng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
98 nếu thư viện OpenSSL có openSSL_NO_TLSEXT được xác định khi nó được xây dựng.

Mới trong phiên bản 3.7.

SslContext.set_servername_callback (server_name_callback) ¶set_servername_callback(server_name_callback)

Đây là một API kế thừa được giữ lại để tương thích ngược. Khi có thể, bạn nên sử dụng

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
73 thay thế. Server_name_callback đã cho tương tự như SNI_Callback, ngoại trừ khi tên máy chủ máy chủ là tên miền quốc tế hóa được mã hóa IDN, server_name_callback nhận được nhãn U được giải mã (
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
14).

Nếu có lỗi giải mã trên tên máy chủ, kết nối TLS sẽ chấm dứt với thông báo cảnh báo TLS

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
70 cho máy khách.

Mới trong phiên bản 3.4.

SslContext.load_dh_params (dhfile) ¶load_dh_params(dhfile)

Tải các tham số tạo khóa cho trao đổi khóa Diffie-Hellman (DH). Sử dụng DH Key Exchange cải thiện bí mật về phía trước với chi phí tài nguyên tính toán (cả trên máy chủ và trên máy khách). Tham số DHFILE phải là đường dẫn đến một tệp chứa các tham số DH ở định dạng PEM.

Cài đặt này không áp dụng cho ổ cắm khách hàng. Bạn cũng có thể sử dụng tùy chọn

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
76 để cải thiện bảo mật hơn nữa.

Mới trong phiên bản 3.3.

SslContext.set_ecdh_curve (curve_name) ¶set_ecdh_curve(curve_name)

Đặt tên đường cong cho trao đổi khóa Diffie-Hellman (ECDH) dựa trên đường cong hình elip. ECDH nhanh hơn đáng kể so với DH thông thường trong khi được cho là an toàn. Tham số Curve_Name phải là một chuỗi mô tả một đường cong elip nổi tiếng, ví dụ

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
77 cho một đường cong được hỗ trợ rộng rãi.

Cài đặt này không áp dụng cho ổ cắm khách hàng. Bạn cũng có thể sử dụng tùy chọn

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
78 để cải thiện bảo mật hơn nữa.

Phương pháp này không có sẵn nếu

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
79 là
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9.

Mới trong phiên bản 3.3.

SslContext.set_ecdh_curve (curve_name) ¶wrap_socket(sock, server_side=False, do_handshake_on_connect=True, suppress_ragged_eofs=True, server_hostname=None, session=None)

Đặt tên đường cong cho trao đổi khóa Diffie-Hellman (ECDH) dựa trên đường cong hình elip. ECDH nhanh hơn đáng kể so với DH thông thường trong khi được cho là an toàn. Tham số Curve_Name phải là một chuỗi mô tả một đường cong elip nổi tiếng, ví dụ

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
77 cho một đường cong được hỗ trợ rộng rãi.

Cài đặt này không áp dụng cho ổ cắm khách hàng. Bạn cũng có thể sử dụng tùy chọn

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
78 để cải thiện bảo mật hơn nữa.

Phương pháp này không có sẵn nếu

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
79 là
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9.

SslContext.wrap_socket (sock, server_side = false, do_handshake_on_connect = true, ispress_ragged_eofs = true, server_hostname = none, session = none) ¶

Bao bọc một sock sock python hiện có và trả về một thể hiện là

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
81 (mặc định
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4). Ổ cắm SSL được trả về được gắn với bối cảnh, cài đặt và chứng chỉ của nó. Sock phải là ổ cắm
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
36; Các loại ổ cắm khác không được hỗ trợ.

Tham số

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
93 chỉ định cách phương thức
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
94 sẽ báo hiệu EOF bất ngờ từ đầu kia của kết nối. Nếu được chỉ định là
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
5 (mặc định), nó sẽ trả về một EOF bình thường (một đối tượng Byte trống) để đáp ứng với các lỗi EOF bất ngờ được nêu từ ổ cắm bên dưới; Nếu
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
9, nó sẽ nâng các ngoại lệ trở lại cho người gọi.

Phiên, xem

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
97.

Đã thay đổi trong phiên bản 3.5: Luôn cho phép server_hostname được truyền, ngay cả khi OpenSSL không có SNI.Always allow a server_hostname to be passed, even if OpenSSL does not have SNI.

Thay đổi trong phiên bản 3.6: Đối số phiên đã được thêm vào.session argument was added.

SslContext.sslsocket_class¶sslsocket_class

Loại trả về của

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1, mặc định là
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4. Thuộc tính có thể được ghi đè trên ví dụ của lớp để trả về một lớp con tùy chỉnh của
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4.

Mới trong phiên bản 3.7.

SslContext.wrap_bio (đến, gửi đi, server_side = false, server_hostname = none, session = none) ¶wrap_bio(incoming, outgoing, server_side=False, server_hostname=None, session=None)

Bao bọc các đối tượng sinh học đến và gửi đi và trả về một thể hiện là

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
01 (mặc định ____402). Các thói quen SSL sẽ đọc dữ liệu đầu vào từ sinh học đến và ghi dữ liệu vào tiểu sử đi.

Các tham số server_side, server_hostname và phiên có cùng ý nghĩa như trong

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1.

Thay đổi trong phiên bản 3.6: Đối số phiên đã được thêm vào.session argument was added.

SslContext.sslsocket_class¶sslobject_class

Loại trả về của

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1, mặc định là
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4. Thuộc tính có thể được ghi đè trên ví dụ của lớp để trả về một lớp con tùy chỉnh của
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4.

Mới trong phiên bản 3.7.

SslContext.wrap_bio (đến, gửi đi, server_side = false, server_hostname = none, session = none) ¶session_stats()

Bao bọc các đối tượng sinh học đến và gửi đi và trả về một thể hiện là

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
01 (mặc định ____402). Các thói quen SSL sẽ đọc dữ liệu đầu vào từ sinh học đến và ghi dữ liệu vào tiểu sử đi.

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
3

Các tham số server_side, server_hostname và phiên có cùng ý nghĩa như trong
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1.
check_hostname

SslContext.sslobject_class¶

Example:

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
4

Loại trả về của

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
04, mặc định là
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
02. Thuộc tính có thể được ghi đè trên ví dụ của lớp để trả về một lớp con tùy chỉnh của
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
02.

SslContext.session_stats () ¶keylog_filename

Nhận số liệu thống kê về các phiên SSL được tạo hoặc quản lý bởi bối cảnh này. Một từ điển được trả về, ánh xạ tên của từng phần thông tin theo giá trị số của chúng. Ví dụ: đây là tổng số lượt truy cập và bỏ lỡ trong bộ đệm phiên vì ngữ cảnh được tạo:

SslContext.check_hostname¶

Có phù hợp với tên máy chủ Peer Cert trong
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
91. Bối cảnh từ ngữ ____ ____58 phải được đặt thành
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
52 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và bạn phải chuyển server_hostname sang
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6 để khớp tên máy chủ. Kích hoạt kiểm tra tên máy chủ tự động đặt
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
8 từ
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75 đến
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9. Nó không thể được đặt trở lại
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75 miễn là kiểm tra tên máy chủ được bật. Giao thức
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 cho phép kiểm tra tên máy chủ theo mặc định. Với các giao thức khác, kiểm tra tên máy chủ phải được bật rõ ràng.
maximum_version

Mới trong phiên bản 3.4.

SSLContext.Keylog_Filename¶

Mới trong phiên bản 3.7.

SslContext.wrap_bio (đến, gửi đi, server_side = false, server_hostname = none, session = none) ¶minimum_version

Bao bọc các đối tượng sinh học đến và gửi đi và trả về một thể hiện là

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
01 (mặc định ____402). Các thói quen SSL sẽ đọc dữ liệu đầu vào từ sinh học đến và ghi dữ liệu vào tiểu sử đi.

Mới trong phiên bản 3.7.

SslContext.wrap_bio (đến, gửi đi, server_side = false, server_hostname = none, session = none) ¶num_tickets

Bao bọc các đối tượng sinh học đến và gửi đi và trả về một thể hiện là

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
01 (mặc định ____402). Các thói quen SSL sẽ đọc dữ liệu đầu vào từ sinh học đến và ghi dữ liệu vào tiểu sử đi.

SslContext.check_hostname¶

Có phù hợp với tên máy chủ Peer Cert trong
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
91. Bối cảnh từ ngữ ____ ____58 phải được đặt thành
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
52 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và bạn phải chuyển server_hostname sang
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6 để khớp tên máy chủ. Kích hoạt kiểm tra tên máy chủ tự động đặt
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
8 từ
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75 đến
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9. Nó không thể được đặt trở lại
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75 miễn là kiểm tra tên máy chủ được bật. Giao thức
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 cho phép kiểm tra tên máy chủ theo mặc định. Với các giao thức khác, kiểm tra tên máy chủ phải được bật rõ ràng.
options

Mới trong phiên bản 3.4.

SSLContext.Keylog_Filename¶

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
38 returns
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
35 flags:

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
5

Viết các phím TLS vào tệp keylog, bất cứ khi nào tài liệu chính được tạo hoặc nhận. Tệp Keylog chỉ được thiết kế cho mục đích gỡ lỗi. Định dạng tệp được chỉ định bởi NSS và được sử dụng bởi nhiều máy phân tích lưu lượng như Wireshark. Tệp nhật ký được mở ở chế độ chỉ phụ lục. Viết được đồng bộ hóa giữa các luồng, nhưng không phải giữa các quá trình.post_handshake_auth

Mới trong phiên bản 3.8.

SslContext.maximum_version¶

Một thành viên enum

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
17 đại diện cho phiên bản TLS được hỗ trợ cao nhất. Giá trị mặc định là
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
18. Thuộc tính chỉ được đọc cho các giao thức khác với
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
09,
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 và
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
4.

SslContext.check_hostname¶

Có phù hợp với tên máy chủ Peer Cert trong
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
91. Bối cảnh từ ngữ ____ ____58 phải được đặt thành
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
52 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và bạn phải chuyển server_hostname sang
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6 để khớp tên máy chủ. Kích hoạt kiểm tra tên máy chủ tự động đặt
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
8 từ
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75 đến
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9. Nó không thể được đặt trở lại
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75 miễn là kiểm tra tên máy chủ được bật. Giao thức
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 cho phép kiểm tra tên máy chủ theo mặc định. Với các giao thức khác, kiểm tra tên máy chủ phải được bật rõ ràng.
protocol

Mới trong phiên bản 3.4.

SslContext.hostname_checks_common_name¶hostname_checks_common_name

Liệu

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 có trở lại để xác minh tên chung của CERT CERT trong trường hợp không có phần mở rộng tên thay thế chủ đề (mặc định: true).

Mới trong phiên bản 3.7.

Đã thay đổi trong phiên bản 3.10: Cờ không có tác dụng với OpenSSL trước phiên bản 1.1.1k. Python 3.8.9, 3.9.3 và 3.10 bao gồm các cách giải quyết cho các phiên bản trước.The flag had no effect with OpenSSL before version 1.1.1k. Python 3.8.9, 3.9.3, and 3.10 include workarounds for previous versions.

SslContext.security_level¶security_level

Một số nguyên đại diện cho cấp độ bảo mật cho bối cảnh. Thuộc tính này chỉ đọc.

Mới trong phiên bản 3.10.

SslContext.verify_flags¶verify_flags

Các cờ cho các hoạt động xác minh chứng chỉ. Bạn có thể đặt cờ như

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
41 bằng cách kết hợp chúng lại với nhau. Theo mặc định, OpenSSL không yêu cầu cũng không xác minh danh sách thu hồi chứng chỉ (CRLS).

Mới trong phiên bản 3.4.

SslContext.verify_mode¶verify_mode

Có nên cố gắng xác minh các chứng chỉ đồng nghiệp khác và cách cư xử nếu xác minh không thành công. Thuộc tính này phải là một trong

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75,
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
52 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9.

Giấy chứng nhận công

Giấy chứng nhận nói chung là một phần của hệ thống khóa công cộng / khóa tư nhân. Trong hệ thống này, mỗi hiệu trưởng, (có thể là một máy, hoặc một người hoặc một tổ chức) được chỉ định một khóa mã hóa hai phần duy nhất. Một phần của khóa là công khai và được gọi là khóa công khai; Phần khác được giữ bí mật, và được gọi là khóa riêng. Hai phần có liên quan, trong đó nếu bạn mã hóa một tin nhắn với một trong các phần, bạn có thể giải mã nó bằng phần khác và chỉ với phần khác.only with the other part.

Một chứng chỉ chứa thông tin về hai hiệu trưởng. Nó chứa tên của một chủ đề và khóa công khai của chủ đề. Nó cũng chứa một tuyên bố của một hiệu trưởng thứ hai, nhà phát hành, rằng chủ đề họ là người mà họ tuyên bố, và đây thực sự là chủ đề của công chúng. Tuyên bố của nhà phát hành được ký hợp đồng với khóa riêng của nhà phát hành, mà chỉ có nhà phát hành biết. Tuy nhiên, bất kỳ ai cũng có thể xác minh tuyên bố của nhà phát hành bằng cách tìm khóa công khai của nhà phát hành, giải mã tuyên bố với nó và so sánh nó với thông tin khác trong chứng chỉ. Giấy chứng nhận cũng chứa thông tin về khoảng thời gian mà nó hợp lệ. Điều này được thể hiện dưới dạng hai lĩnh vực, được gọi là Not Notbefore và Not Notafter.

Trong việc sử dụng chứng chỉ Python, máy khách hoặc máy chủ có thể sử dụng chứng chỉ để chứng minh họ là ai. Mặt khác của kết nối mạng cũng có thể được yêu cầu để tạo chứng chỉ và chứng chỉ đó có thể được xác thực với sự hài lòng của máy khách hoặc máy chủ yêu cầu xác thực đó. Nỗ lực kết nối có thể được đặt để tăng một ngoại lệ nếu xác thực không thành công. Xác thực được thực hiện tự động, bởi khung OpenSSL cơ bản; Ứng dụng không cần phải quan tâm đến cơ chế của nó. Nhưng ứng dụng thường cần cung cấp các bộ chứng chỉ để cho phép quá trình này diễn ra.

Python sử dụng các tập tin để chứa chứng chỉ. Chúng nên được định dạng là PEM PEM (xem RFC 1422), đây là một hình thức được mã hóa cơ sở 64 được bọc bằng một đường tiêu đề và một dòng chân trang:RFC 1422), which is a base-64 encoded form wrapped with a header line and a footer line:

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
6

Chuỗi chứng chỉ

Các tệp Python có chứa chứng chỉ có thể chứa một chuỗi chứng chỉ, đôi khi được gọi là chuỗi chứng chỉ. Chuỗi này nên bắt đầu với chứng chỉ cụ thể cho hiệu trưởng, người là khách hàng hoặc máy chủ, và sau đó là chứng chỉ cho người cấp chứng chỉ đó, và sau đó là chứng chỉ cho người cấp chứng chỉ đó, v.v. Nhận một chứng chỉ tự ký, nghĩa là một chứng chỉ có cùng chủ đề và nhà phát hành, đôi khi được gọi là chứng chỉ gốc. Các chứng chỉ chỉ nên được nối với nhau trong tệp chứng chỉ. Ví dụ: giả sử chúng tôi có một chuỗi chứng chỉ ba, từ chứng chỉ máy chủ của chúng tôi đến chứng chỉ của cơ quan chứng nhận đã ký chứng chỉ máy chủ của chúng tôi, cho chứng chỉ gốc của cơ quan cấp chứng chỉ chứng nhận của cơ quan chứng nhận:

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
7

CA chứng chỉ

Nếu bạn sẽ yêu cầu xác thực phía bên kia của chứng chỉ kết nối, bạn cần cung cấp tệp CA CA Certs, chứa đầy chuỗi chứng chỉ cho mỗi công ty phát hành mà bạn sẵn sàng tin tưởng. Một lần nữa, tập tin này chỉ chứa các chuỗi này được nối với nhau. Để xác thực, Python sẽ sử dụng chuỗi đầu tiên mà nó tìm thấy trong tệp phù hợp. Tệp chứng chỉ nền tảng có thể được sử dụng bằng cách gọi

>>> ssl.enum_certificates("CA")
[(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
 (b'data...', 'x509_asn', True)]
0, điều này được thực hiện tự động bằng
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
5.

Khóa kết hợp và chứng chỉ

Thông thường khóa riêng được lưu trữ trong cùng một tệp với chứng chỉ; Trong trường hợp này, chỉ có tham số

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
47 thành
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
39 và
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
6 cần được thông qua. Nếu khóa riêng được lưu trữ bằng chứng chỉ, nó sẽ đến trước chứng chỉ đầu tiên trong chuỗi chứng chỉ:

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
8

Giấy chứng nhận tự ký công

Nếu bạn định tạo một máy chủ cung cấp dịch vụ kết nối được mã hóa SSL, bạn sẽ cần phải có chứng chỉ cho dịch vụ đó. Có nhiều cách để có được chứng chỉ phù hợp, chẳng hạn như mua một từ cơ quan chứng nhận. Một thực tế phổ biến khác là tạo chứng chỉ tự ký. Cách đơn giản nhất để làm điều này là với gói OpenSSL, sử dụng một cái gì đó như sau:

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
9

Nhược điểm của chứng chỉ tự ký là đó là chứng chỉ gốc của riêng nó và không ai khác sẽ có nó trong bộ nhớ cache của các chứng chỉ gốc đã biết (và đáng tin cậy).

Ví dụ;

Kiểm tra hỗ trợ SSL

Để kiểm tra sự hiện diện của hỗ trợ SSL trong cài đặt Python, mã người dùng nên sử dụng thành ngữ sau:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
0

Hoạt động phía máy khách

Ví dụ này tạo ra bối cảnh SSL với các cài đặt bảo mật được đề xuất cho ổ cắm máy khách, bao gồm xác minh chứng chỉ tự động:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
1

Nếu bạn thích tự điều chỉnh cài đặt bảo mật, bạn có thể tạo ngữ cảnh từ đầu (nhưng hãy cẩn thận rằng bạn có thể không nhận được cài đặt đúng):

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
2

.

Giao thức

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 định cấu hình ngữ cảnh để xác thực CERT và xác minh tên máy chủ.
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
8 được đặt thành
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 được đặt thành
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
5. Tất cả các giao thức khác tạo ra bối cảnh SSL với mặc định không an toàn.

Khi bạn sử dụng bối cảnh để kết nối với máy chủ,

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và
hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
62 xác thực chứng chỉ máy chủ: nó đảm bảo rằng chứng chỉ máy chủ đã được ký với một trong các chứng chỉ CA, kiểm tra chữ ký cho tính chính xác và xác minh các thuộc tính khác như tính hợp lệ và nhận dạng của Tên máy chủ:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
3

Sau đó, bạn có thể lấy chứng chỉ:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
4

Kiểm tra trực quan cho thấy chứng chỉ xác định dịch vụ mong muốn (nghĩa là máy chủ HTTPS

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
58):

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
5

Bây giờ kênh SSL đã được thiết lập và chứng chỉ được xác minh, bạn có thể tiến hành nói chuyện với máy chủ:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
6

Xem các cuộc thảo luận về các cân nhắc bảo mật dưới đây.Security considerations below.

Hoạt động phía máy chủ

Đối với hoạt động của máy chủ, thông thường, bạn sẽ cần phải có chứng chỉ máy chủ và khóa riêng, mỗi trong một tệp. Trước tiên, bạn sẽ tạo một bối cảnh giữ khóa và chứng chỉ, để khách hàng có thể kiểm tra tính xác thực của bạn. Sau đó, bạn sẽ mở một ổ cắm, liên kết nó với một cổng, gọi

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
21 trên đó và bắt đầu chờ khách hàng kết nối:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
7

Khi khách hàng kết nối, bạn sẽ gọi

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
08 trên ổ cắm để lấy ổ cắm mới từ đầu kia và sử dụng phương thức bối cảnh
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
1 để tạo ổ cắm SSL phía máy chủ cho kết nối:

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
8

Sau đó, bạn sẽ đọc dữ liệu từ

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
62 và làm điều gì đó với nó cho đến khi bạn kết thúc với máy khách (hoặc khách hàng đã kết thúc với bạn):

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
9

Và quay lại để lắng nghe các kết nối máy khách mới (tất nhiên, một máy chủ thực có thể sẽ xử lý từng kết nối máy khách trong một luồng riêng biệt hoặc đặt các ổ cắm ở chế độ không chặn và sử dụng vòng lặp sự kiện).non-blocking mode and use an event loop).

Ghi chú về ổ cắm không chặn

Các ổ cắm SSL hoạt động hơi khác so với ổ cắm thông thường ở chế độ không chặn. Khi làm việc với các ổ cắm không chặn, do đó có một số điều bạn cần nhận thức được:

  • Hầu hết các phương thức

    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    4 sẽ tăng
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    44 hoặc
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    43 thay vì
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    66 nếu hoạt động I/O sẽ chặn.
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    43 sẽ được nâng lên nếu một hoạt động đọc trên ổ cắm bên dưới là cần thiết và
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    44 cho một thao tác ghi trên ổ cắm bên dưới. Lưu ý rằng các nỗ lực ghi vào ổ cắm SSL có thể yêu cầu đọc từ ổ cắm bên dưới và cố gắng đọc từ ổ cắm SSL có thể yêu cầu ghi trước cho ổ cắm bên dưới.

    Đã thay đổi trong phiên bản 3.5: Trong các phiên bản Python trước đó, phương thức

    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    69 đã trả về 0 thay vì tăng
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    44 hoặc
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    43.In earlier Python versions, the
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    69 method returned zero instead of raising
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    44 or
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    43.

  • Gọi

    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    72 cho bạn biết rằng ổ cắm cấp hệ điều hành có thể được đọc từ (hoặc viết thành), nhưng nó không ngụ ý rằng có đủ dữ liệu ở lớp SSL trên. Ví dụ, chỉ một phần của khung SSL mới có thể đến. Do đó, bạn phải sẵn sàng xử lý các thất bại
    ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    94 và
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    69 và thử lại sau một cuộc gọi khác đến
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    72.

  • Ngược lại, vì lớp SSL có khung riêng, một ổ cắm SSL vẫn có thể có sẵn dữ liệu để đọc mà không cần

    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    72 biết về nó. Do đó, trước tiên bạn nên gọi
    ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    94 để thoát bất kỳ dữ liệu có khả năng nào và sau đó chỉ chặn trong cuộc gọi
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    72 nếu vẫn cần thiết.

    (Tất nhiên, các điều khoản tương tự được áp dụng khi sử dụng các nguyên thủy khác như

    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    79 hoặc các điều khoản trong mô -đun
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    80

  • Bản thân việc bắt tay SSL sẽ không chặn: Phương pháp

    ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    91 phải được thử lại cho đến khi nó trả về thành công. Dưới đây là bản tóm tắt sử dụng
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    72 để chờ đợi sự sẵn sàng của ổ cắm:

    ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    0

Hỗ trợ sinh học bộ nhớ

Mới trong phiên bản 3.5.

Kể từ khi mô -đun SSL được giới thiệu trong Python 2.6, lớp

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4 đã cung cấp hai lĩnh vực chức năng liên quan nhưng khác biệt:

  • Xử lý giao thức SSL

  • Mạng IO

API IO mạng giống hệt với quy mô được cung cấp bởi

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
7, từ đó
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4 cũng được kế thừa. Điều này cho phép sử dụng ổ cắm SSL làm thay thế cho ổ cắm thông thường, giúp việc thêm hỗ trợ SSL rất dễ dàng vào một ứng dụng hiện có.

Kết hợp xử lý giao thức SSL và IO mạng thường hoạt động tốt, nhưng có một số trường hợp nó không có. Một ví dụ là các khung IO ASYNC muốn sử dụng mô hình ghép kênh IO khác với mô hình mô tả tệp (dựa trên) mô tả tệp (dựa trên tính sẵn sàng) được giả định bởi

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
7 và bởi các thói quen IO của OpenSSL OpenSSL. Điều này chủ yếu phù hợp cho các nền tảng như Windows nơi mô hình này không hiệu quả. Với mục đích này, một biến thể phạm vi giảm của
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4 được gọi là
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
02 được cung cấp.

classSSSL.SSLOBject¶ ssl.SSLObject

Một biến thể phạm vi giảm của

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4 đại diện cho một thể hiện giao thức SSL không chứa bất kỳ phương thức IO mạng nào. Lớp này thường được sử dụng bởi các tác giả khung muốn thực hiện IO không đồng bộ cho SSL thông qua bộ đệm bộ nhớ.

Lớp này thực hiện một giao diện trên đỉnh của một đối tượng SSL cấp thấp được thực hiện bởi OpenSSL. Đối tượng này nắm bắt trạng thái của kết nối SSL nhưng không cung cấp bất kỳ IO mạng nào. IO cần được thực hiện thông qua các đối tượng Bio Bio riêng biệt là lớp trừu tượng IO OpenSSL.

Lớp học này không có nhà xây dựng công cộng. Một thể hiện

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
02 phải được tạo bằng phương pháp
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
91. Phương pháp này sẽ tạo phiên bản
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
02 và liên kết nó với một cặp BIOS. Sinh học đến được sử dụng để truyền dữ liệu từ Python sang thể hiện giao thức SSL, trong khi tiểu sử đi được sử dụng để truyền dữ liệu theo cách khác.

Các phương pháp sau đây có sẵn:

  • >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    93

  • ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    84

  • ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    12

  • ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    97

  • >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    97

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    45

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    50

  • ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    8

  • >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    01

  • >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    02

  • ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    9

  • context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    85

  • >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    05

  • >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    06

  • ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    16

  • >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    08

  • >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    09

  • >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    10

  • >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    11

Khi so sánh với

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
4, đối tượng này thiếu các tính năng sau:

  • Bất kỳ hình thức mạng IO;

    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    23 và
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    26 Đọc và chỉ ghi cho bộ đệm
    >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    15 bên dưới.

  • Không có máy móc DO_HANDSHAKE_ON_CONNECT. Bạn phải luôn gọi thủ công

    ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    16 để bắt đầu bắt tay.

  • Không có cách xử lý của esspress_ragged_eofs. Tất cả các điều kiện cuối tệp đang vi phạm giao thức đều được báo cáo thông qua ngoại lệ

    >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    17.

  • Cuộc gọi phương thức

    >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    09 không trả về bất cứ điều gì, không giống như một ổ cắm SSL nơi nó trả về ổ cắm bên dưới.

  • Cuộc gọi lại server_name_callback được chuyển đến

    hostname = 'www.python.org'
    # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_verify_locations('path/to/cabundle.pem')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    
    98 sẽ nhận được một thể hiện
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    02 thay vì một thể hiện
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    4 làm tham số đầu tiên của nó.

Một số ghi chú liên quan đến việc sử dụng

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
02:

  • Tất cả IO trên

    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    02 là không chặn. Điều này có nghĩa là ví dụ
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    45 sẽ tăng
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    43 nếu nó cần nhiều dữ liệu hơn so với sinh học đến có sẵn.non-blocking. This means that for example
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    45 will raise an
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('127.0.0.1', 8443))
        sock.listen(5)
        with context.wrap_socket(sock, server_side=True) as ssock:
            conn, addr = ssock.accept()
            ...
    
    43 if it needs more data than the incoming BIO has available.

  • Không có cuộc gọi cấp độ mô-đun

    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    91 như có cho
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    6. Một
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    02 luôn được tạo thông qua
    >>> cert = {'subject': ((('commonName', 'example.com'),),)}
    >>> ssl.match_hostname(cert, "example.com")
    >>> ssl.match_hostname(cert, "example.org")
    Traceback (most recent call last):
      File "", line 1, in 
      File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
    ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
    
    3.

Đã thay đổi trong phiên bản 3.7:

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
02 Các phiên bản phải được tạo bằng
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
91. Trong các phiên bản trước, có thể tạo các trường hợp trực tiếp. Điều này chưa bao giờ được ghi nhận hoặc chính thức được hỗ trợ.
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
02 instances must to created with
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
91. In earlier versions, it was possible to create instances directly. This was never documented or officially supported.

Một SSLOBject giao tiếp với thế giới bên ngoài bằng cách sử dụng bộ đệm bộ nhớ. Lớp

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
15 cung cấp bộ đệm bộ nhớ có thể được sử dụng cho mục đích này. Nó kết thúc một đối tượng Bio bộ nhớ OpenSSL (IO cơ bản):

ClassSSSL.Memorybio¶ssl.MemoryBIO

Bộ đệm bộ nhớ có thể được sử dụng để truyền dữ liệu giữa Python và phiên bản giao thức SSL.

chưa giải quyết¶

Trả về số byte hiện tại trong bộ đệm bộ nhớ.

eof¶

Một boolean cho biết liệu sinh học bộ nhớ có dòng điện ở vị trí cuối tập tin hay không.

Đọc (n = -1) ¶(n=- 1)

Đọc tối đa n byte từ bộ đệm bộ nhớ. Nếu N không được chỉ định hoặc âm, tất cả các byte được trả về.

Viết (BUF) ¶(buf)

Viết các byte từ BUF vào tiểu sử bộ nhớ. Đối số BUF phải là một đối tượng hỗ trợ giao thức bộ đệm.

Giá trị trả về là số byte được viết, luôn bằng chiều dài của BUF.

write_eof () ¶()

Viết một điểm đánh dấu EOF vào tiểu sử bộ nhớ. Sau khi phương pháp này được gọi, việc gọi

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
50 là bất hợp pháp. Thuộc tính
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
34 sẽ trở thành đúng sau khi tất cả dữ liệu hiện tại trong bộ đệm đã được đọc.

Phiên SSL

Mới trong phiên bản 3.6.

classSSSL.sslsession¶ssl.SSLSession

Đối tượng phiên được sử dụng bởi

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
97.

Id¶ Time¶ Timeout¶ Ticket_Lifetime_Hint¶s Has_Ticket¶timetimeoutticket_lifetime_hinthas_ticket

Cân nhắc về Bảo mật¶

Mặc định tốt nhất

Để sử dụng cho khách hàng, nếu bạn không có bất kỳ yêu cầu đặc biệt nào cho chính sách bảo mật của mình, bạn nên sử dụng chức năng

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
5 để tạo bối cảnh SSL của mình. Nó sẽ tải các chứng chỉ CA đáng tin cậy của hệ thống, bật xác thực chứng chỉ và kiểm tra tên máy chủ và cố gắng chọn cài đặt giao thức và mật mã bảo mật hợp lý.client use, if you don’t have any special requirements for your security policy, it is highly recommended that you use the
>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
5 function to create your SSL context. It will load the system’s trusted CA certificates, enable certificate validation and hostname checking, and try to choose reasonably secure protocol and cipher settings.

Ví dụ: đây là cách bạn sẽ sử dụng lớp

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
37 để tạo kết nối an toàn, đáng tin cậy đến máy chủ SMTP:

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
1

Nếu cần có chứng chỉ máy khách cho kết nối, nó có thể được thêm vào với

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
39.

Ngược lại, nếu bạn tạo bối cảnh SSL bằng cách tự gọi Trình xây dựng

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3, nó sẽ không có xác thực chứng chỉ cũng như kiểm tra tên máy chủ được bật theo mặc định. Nếu bạn làm như vậy, xin vui lòng đọc các đoạn dưới đây để đạt được mức độ bảo mật tốt.

Cài đặt thủ công

Xác minh chứng chỉ

Khi gọi trực tiếp cho hàm tạo

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
3,
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
75 là mặc định. Vì nó không xác thực người ngang hàng khác, nên nó có thể không an toàn, đặc biệt là ở chế độ máy khách, nơi hầu hết thời gian bạn muốn đảm bảo tính xác thực của máy chủ mà bạn đang nói chuyện. Do đó, khi ở chế độ máy khách, rất khuyến khích sử dụng
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9. Tuy nhiên, bản thân nó không đủ; Bạn cũng phải kiểm tra xem chứng chỉ máy chủ có thể thu được bằng cách gọi
>>> ssl.OPENSSL_VERSION_NUMBER
268443839
>>> hex(ssl.OPENSSL_VERSION_NUMBER)
'0x100020bf'
3 không, phù hợp với dịch vụ mong muốn. Đối với nhiều giao thức và ứng dụng, dịch vụ có thể được xác định bởi tên máy chủ; Trong trường hợp này, hàm
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
58 có thể được sử dụng. Kiểm tra chung này được tự động thực hiện khi
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
45 được bật.

Đã thay đổi trong phiên bản 3.7: Các kết hợp tên máy chủ hiện được thực hiện bởi OpenSSL. Python không còn sử dụng

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
58.Hostname matchings is now performed by OpenSSL. Python no longer uses
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(('127.0.0.1', 8443))
    sock.listen(5)
    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        ...
58.

Trong chế độ máy chủ, nếu bạn muốn xác thực máy khách của mình bằng lớp SSL (thay vì sử dụng cơ chế xác thực cấp cao hơn), bạn cũng sẽ phải chỉ định

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
9 và kiểm tra tương tự chứng chỉ máy khách.

Phiên bản giao thức

Các phiên bản SSL 2 và 3 được coi là không an toàn và do đó nguy hiểm khi sử dụng. Nếu bạn muốn khả năng tương thích tối đa giữa máy khách và máy chủ, nên sử dụng

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
4 làm phiên bản giao thức. SSLV2 và SSLV3 bị tắt theo mặc định.

ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3
2

Bối cảnh SSL được tạo ở trên sẽ chỉ cho phép các kết nối TLSV1.2 trở lên (nếu được hỗ trợ bởi hệ thống của bạn) đến máy chủ.

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
3 ngụ ý xác thực chứng chỉ và kiểm tra tên máy chủ theo mặc định. Bạn phải tải chứng chỉ vào bối cảnh.

Lựa chọn mật mã

Nếu bạn có các yêu cầu bảo mật nâng cao, việc tinh chỉnh các mật mã được kích hoạt khi đàm phán một phiên SSL là có thể thông qua phương thức

hostname = 'www.python.org'
# PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations('path/to/cabundle.pem')

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
41. Bắt đầu từ Python 3.2.3, mô -đun SSL vô hiệu hóa một số mật mã yếu nhất định theo mặc định, nhưng bạn có thể muốn hạn chế hơn nữa lựa chọn mật mã. Hãy chắc chắn đọc tài liệu OpenSSL, về định dạng danh sách mật mã. Nếu bạn muốn kiểm tra các mật mã nào được bật bởi một danh sách mật mã đã cho, hãy sử dụng lệnh
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
52 hoặc lệnh
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
53 trên hệ thống của bạn.

Nhiều quá trình

Nếu sử dụng mô-đun này như là một phần của ứng dụng đa xử lý (ví dụ, ví dụ, các mô-đun

>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
54 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
55), hãy lưu ý rằng trình tạo số ngẫu nhiên nội bộ của OpenSSL không xử lý đúng các quy trình. Các ứng dụng phải thay đổi trạng thái PRNG của quy trình mẹ nếu họ sử dụng bất kỳ tính năng SSL nào với
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
56. Bất kỳ cuộc gọi thành công nào của
>>> ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 11, 15)
3,
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
58 hoặc
>>> import ssl
>>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
>>> timestamp  
1515144883
>>> from datetime import datetime
>>> print(datetime.utcfromtimestamp(timestamp))  
2018-01-05 09:34:43
59 là đủ.

TLS 1.3¶

Mới trong phiên bản 3.7.

Giao thức TLS 1.3 hoạt động hơi khác so với phiên bản TLS/SSL trước đó. Một số tính năng TLS 1.3 mới chưa có sẵn.

  • TLS 1.3 sử dụng một bộ các bộ mật mã khác nhau. Tất cả các bộ mật mã AES-GCM và Chacha20 đều được bật theo mặc định. Phương pháp

    hostname = 'www.python.org'
    # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_verify_locations('path/to/cabundle.pem')
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    
    41 không thể kích hoạt hoặc vô hiệu hóa bất kỳ mật mã TLS 1.3 nào, nhưng
    >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    52 trả về chúng.

  • Vé phiên không còn được gửi như một phần của bắt tay ban đầu và được xử lý khác nhau.

    >>> import ssl
    >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
    >>> timestamp  
    1515144883
    >>> from datetime import datetime
    >>> print(datetime.utcfromtimestamp(timestamp))  
    2018-01-05 09:34:43
    
    62 và
    ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3
    
    15 không tương thích với TLS 1.3.

  • Chứng chỉ phía máy khách cũng không còn được xác minh trong thời gian bắt tay ban đầu. Một máy chủ có thể yêu cầu chứng chỉ bất cứ lúc nào. Khách hàng xử lý các yêu cầu chứng chỉ trong khi họ gửi hoặc nhận dữ liệu ứng dụng từ máy chủ.

  • TLS 1.3 Các tính năng như dữ liệu ban đầu, yêu cầu chứng nhận máy khách TLS hoãn lại, cấu hình thuật toán chữ ký và việc tái sử dụng vẫn chưa được hỗ trợ.