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 Show
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_SSLv33 và ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv34. 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_SSLv35; Để 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_SSLv36, có nguồn gốc từ loại ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv37 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_SSLv38, 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_SSLv39, 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 "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 "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ạoVì 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 "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 "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 "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 "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 "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ảnhMộ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 "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 "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_SSLv35 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 "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:431. 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:432, 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:433 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:434, >>> 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:435 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:436 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:437 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:438 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:439 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 "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 "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 "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 "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:436. 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 was added. Ngoại lệ hangoạ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 " 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 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 "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 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:
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 "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:431 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 "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 "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 "6. The top-level function is limited and creates an insecure client socket without server name indication or hostname matching. Hằng số trongssl.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 "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:433, 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 "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:439. 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:439 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:431 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 "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 "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:433 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:439 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:433 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:439 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:431 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 "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 "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:433 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:439 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ể chohostname = '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:433 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:434. 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:439 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 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 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 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 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 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 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 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 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_FAILURE¶ ssl.ALERT_DESCRIPTION_INTERNAL_ERROR¶ ALERT_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_SUPPORTED¶ TLSVersion.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¶SSLv3¶ TLSVersion.TLSv1¶ TLSVersion.TLSv1_1¶ TLSVersion.TLSv1_2¶ TLSVersion.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:
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 "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 "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 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 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 "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 "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 "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 "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 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 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 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 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:432. 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:432 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:
Đã 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 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 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:432. 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:432 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:432 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:432 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:432 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:432 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:432 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:432 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:432. 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 "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 "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 "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_SSLv312 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_SSLv313), rather than the U-label form ( ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv314). 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_SSLv312 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_SSLv313), thay vì dạng nhãn U ( ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv314).session_reused¶ Tên máy chủ của máy chủ: Loại Đã 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_SSLv310 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:432 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.
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:433, 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:434 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_SSLv317 đượ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_SSLv332 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_SSLv333 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:438 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:438 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, 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ã. Xemhostname = '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_SSLv345 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_SSLv342 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 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_SSLv344, đượ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_SSLv345 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_SSLv347 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 "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:432 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_SSLv36, 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:432 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 "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_SSLv313). 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 "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_SSLv345 và ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv361. 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_SSLv342 và ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv367 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:432 để 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_SSLv369. 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_SSLv370. 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_SSLv371. 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_SSLv373 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_SSLv314). 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_SSLv370 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_SSLv376 để 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_SSLv377 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_SSLv378 để 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_SSLv379 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_SSLv377 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_SSLv378 để 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_SSLv379 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_SSLv381 (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 "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_SSLv393 chỉ định cách phương thức ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv394 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_SSLv397. Đã 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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 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 trongctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv391. 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:439 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 "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:438 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:439. 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:433 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 "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 "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 trongctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv391. 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:439 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 "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:438 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:439. 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:433 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 "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 "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 "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:433 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:434. SslContext.check_hostname¶ Có phù hợp với tên máy chủ Peer Cert trongctx = ssl.create_default_context(Purpose.CLIENT_AUTH) ctx.options &= ~ssl.OP_NO_SSLv391. 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:439 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 "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:438 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:439. 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:433 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 "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:439. Giấy chứng nhận côngGiấ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 "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 "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 "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ôngNế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áchVí 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:433 đị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:438 đượ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:439 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:439 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 "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 "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 "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ặnCá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ỗ 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 "4 đã cung cấp hai lĩnh vực chức năng liên quan nhưng khác biệt:
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_SSLv37, từ đó >>> cert = {'subject': ((('commonName', 'example.com'),),)} >>> ssl.match_hostname(cert, "example.com") >>> ssl.match_hostname(cert, "example.org") Traceback (most recent call last): File "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_SSLv37 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 "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 "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 "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 "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 "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 "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:
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 "4, đối tượng này thiếu các tính năng sau:
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 "02:
Đã 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 "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 "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:4315 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:4334 sẽ trở thành đúng sau khi tất cả dữ liệu hiện tại trong bộ đệm đã được đọc. Phiên SSLMớ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_SSLv397. Id¶ Time¶ Timeout¶ Ticket_Lifetime_Hint¶s Has_Ticket¶¶ time¶ timeout¶ ticket_lifetime_hint¶ has_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 "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 "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:4337 để 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_SSLv31 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 "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ôngXá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 "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:439. 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:4345 đượ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. 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:439 và kiểm tra tương tự chứng chỉ máy khách. Phiên bản giao thứcCá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:433 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:434 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_SSLv32 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:433 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:4352 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:4353 trên hệ thống của bạn. Nhiều quá trìnhNế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:4354 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:4355), 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:4356. 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:4358 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:4359 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.
|