Tôi có một bản cài đặt Python từ môi trường Anaconda. Nếu tôi kiểm tra nơi Python đang tìm chứng chỉ SSL với mã bên dưới, tôi sẽ nhận được kết quả kỳ lạ:
import ssl
ssl.get_default_verify_paths[]
Đầu ra là:
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Điều này không có ý nghĩa với tôi: Tại sao các đường dẫn theo "phong cách Linux"? Tôi đang cố gắng thực hiện các yêu cầu API với gói
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
0 và tôi đang gặp lỗi SSL.Làm thế nào tôi có thể thay đổi các biến đường dẫn?
Làm thế nào tôi có thể ngăn chặn điều này ngay từ đầu [mặc dù vậy, việc cài đặt Anaconda không phải do tôi, mà là chủ nhân của tôi]?
Thông tin lai lịch
Thư viện tiêu chuẩn Python bao gồm nhiều mô -đun cung cấp chức năng máy khách HTTP, bao gồm ____10,
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
1, DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
2 và DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
3. Mặc dù các mô -đun này hỗ trợ các kết nối HTTPS, nhưng theo truyền thống, chúng không thực hiện xác minh chứng chỉ được trình bày bởi các máy chủ HTTPS và không cung cấp cách nào để dễ dàng kích hoạt xác minh đó. Điều này có thể cho phép những kẻ tấn công người đàn ông trong trung gian [MITM] dễ dàng chiếm quyền điều khiển các kết nối HTTPS từ các máy khách Python sang nghe lén hoặc sửa đổi dữ liệu được chuyển.Việc thiếu xác minh chứng chỉ này đã được biết đến và thường làm việc xung quanh trong các trường hợp sử dụng có liên quan bằng cách thực hiện xác minh trong các ứng dụng hoặc bằng cách sử dụng các thư viện máy khách HTTP khác nhau thực hiện xác minh chứng chỉ. Các công cụ quản lý gói trong Red Hat Enterprise Linux có thể được sử dụng làm ví dụ: Trình quản lý gói YUM được sử dụng trong Red Hat Enterprise Linux 5, 6 và 7 sử dụng mô-đun Python-Pycurl, một trình bao bọc xung quanh thư viện Curl/Libcurl, thực hiện xác minh chứng chỉ; Trình quản lý gói UP2Date như được sử dụng trong Red Hat Enterprise Linux 4 và trước đó đã triển khai xác minh chứng chỉ bằng mô -đun M2Crypto.
Mặc dù giới hạn này đã được biết đến, nhiều tác giả ứng dụng đã không nhận thức được nó hoặc giả định rằng tất cả các kiểm tra dự kiến đã được thực hiện. Điều đó dẫn đến các báo cáo về một số lỗ hổng bảo mật theo thời gian và việc gán CVE-2014-9365 để thiếu xác minh chứng chỉ trong các máy khách HTTP của Thư viện tiêu chuẩn Python.
Nghị quyết
Độ phân giải ngược dòng
Các nhà phát triển ngược dòng Python đã quyết định giải quyết vấn đề bằng cách cho phép xác minh chứng chỉ theo mặc định. Sự thay đổi đã được thực hiện thông qua đề xuất tăng cường Python PEP 476 [cho phép xác minh chứng chỉ theo mặc định cho các máy khách Stdlib HTTP] và áp dụng cho cả hai nhánh phát triển hiện tại trong phiên bản 3.4.3 và nhánh bảo trì kế thừa trong phiên bản 2.7.9. Đây là một thay đổi gây tranh cãi cho nhánh Legacy 2.7 vì người ta biết có các vấn đề tương thích ngược liên quan đến nó. Việc triển khai cố ý hoặc vô ý dựa vào hành vi cũ mà thiếu bất kỳ xác minh nào dự kiến sẽ bị phá vỡ khi phiên bản Python cập nhật được sử dụng. Do đó, điều này có thể ngăn người dùng áp dụng các phiên bản Python được vá.
Trong nỗ lực giải quyết các vấn đề tương thích này và cung cấp sự chuyển đổi mượt mà hơn sang mặc định an toàn hơn, Red Hat đã làm việc với các thành viên cộng đồng Python để xác định các cơ chế để cho phép người dùng và quản trị viên kiểm soát xem có nên thực hiện xác minh chứng chỉ mà không cần sửa đổi các ứng dụng riêng lẻ hay không. Các cơ chế này được mô tả trong PEP 493 [các công cụ di chuyển xác minh HTTPS cho Python 2.7].
Red Hat Enterprise Linux 7 Nghị quyết
Phiên bản Python có trong Red Hat Enterprise Linux 7 được dựa trên phiên bản ngược dòng 2.7.5 và do đó không thực hiện xác minh chứng chỉ. Sự hỗ trợ cho PEP 476 [cùng với PEP 466 cần thiết [cải tiến bảo mật mạng cho Python 2.7.x]] lần đầu tiên được thêm vào thông qua RHSA-2015: 2101 được phát hành như một phần của Red Hat Enterprise Linux 7.2.
Bản cập nhật RHSA-2015: 2101 bổ sung hỗ trợ cho PEP 476, tuy nhiên do lý do tương thích ngược, nó vô hiệu hóa xác minh chứng chỉ theo mặc định. Nó cũng thực hiện hỗ trợ cho tệp cấu hình
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4 được mô tả trong phần "Backporting PEP 476 đến các phiên bản Python trước đó" của PEP 493. Với hỗ trợ này, xác minh chứng chỉ có thể được bật theo mặc định.Sự hỗ trợ cho PEP 493 trong Red Hat Enterprise Linux 7 đã được mở rộng thêm thông qua RHSA-2016: 2586 được phát hành như một phần của Red Hat Enterprise Linux 7.3. Bản cập nhật thêm các tính năng sau:
Cấu hình dựa trên môi trường, như được mô tả trong phần "Tính năng: Cấu hình dựa trên môi trường" của PEP 493. Mô -đun
5 hiện kiểm tra biến môi trườngDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
6 - Nếu được đặt, giá trị của nó sẽ ghi đè các cài đặt từDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4. Giá trị củaDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
8 vô hiệu hóa xác minh chứng chỉ và bất kỳ giá trị nào khác cho phép nó. Tính năng này có thể được sử dụng bởi người dùng cuối để cho phép hoặc vô hiệu hóa xác minh cho chương trình Python cụ thể hoặc một lời mời cụ thể của chương trình Python, mà không cần sửa đổi mã nguồn của chương trình.DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
API cấu hình, như được mô tả trong phần "Tính năng: API cấu hình" của PEP 493. Hàm
9 có thể được sử dụng để bật hoặc vô hiệu hóa xác minh chứng chỉ khi chạy. API này có thể được sử dụng bởi các tác giả chương trình để đảm bảo các chương trình của họ chạy bằng xác minh được bật hoặc tắt bất kể cài đặt hệ thống mặc định.DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Xác minh chứng chỉ đã được bật theo mặc định thông qua RHSA-2017: 1868 được phát hành như một phần của Red Hat Enterprise Linux 7.4. Việc triển khai yêu cầu xác minh chứng chỉ để duy trì bị vô hiệu hóa có thể thay đổi mặc định trong thông qua tệp cấu hình
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4. Tham khảo phần "Xác minh chứng chỉ kiểm soát" bên dưới để biết thêm chi tiết.Độ phân giải bộ sưu tập phần mềm Red Hat
Phiên bản Python được sử dụng trong bộ sưu tập
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
21 dựa trên phiên bản ngược dòng 3.4.2. Tuy nhiên, hỗ trợ PEP 476 đã được đưa vào phiên bản này và được bao gồm kể từ lần phát hành đầu tiên thông qua Rhea-2015: 1058, được phát hành như một phần của Red Hat Software Collection 2.0, với xác minh chứng chỉ được bật theo mặc định. Nó không bao gồm bất kỳ hỗ trợ nào cho PEP 493 và do đó không thể vô hiệu hóa xác minh theo mặc định thông qua tệp cấu hình DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4. Các mẹo khắc phục sự cố được ghi nhận dưới đây cũng có thể áp dụng cho phiên bản này.Phiên bản Python có trong bộ sưu tập
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
23 ban đầu dựa trên phiên bản ngược dòng 2.7.5 và sau đó được cập nhật lên phiên bản ngược dòng 2.7.8, và do đó không thực hiện xác minh chứng chỉ. Hỗ trợ cho PEP 476 lần đầu tiên được thêm vào thông qua RHSA-2016: 1166 được phát hành như một phần của Bộ sưu tập phần mềm Red Hat 2.2.Bản cập nhật RHSA-2016: 1166 bổ sung hỗ trợ cho PEP 476, tuy nhiên do lý do tương thích ngược, nó vô hiệu hóa xác minh chứng chỉ theo mặc định. Nó cũng thực hiện hỗ trợ cho tệp cấu hình
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4 được mô tả trong phần "Backporting PEP 476 đến các phiên bản Python trước đó" của PEP 493. Bộ sưu tập DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
23 lưu trữ tệp cấu hình DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4 trong thư mục DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
27 thay vì thư mục DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
28. Với hỗ trợ này, xác minh chứng chỉ có thể được bật theo mặc định.Sự hỗ trợ cho PEP 493 trong bộ sưu tập
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
23 đã được mở rộng thêm thông qua RHSA-2017: 1162 được phát hành như một phần của Red Hat Software Collection 2.4. Erratum đó cập nhật Python lên phiên bản 2.7.13 và do đó cho phép xác minh chứng chỉ theo mặc định. Nó cũng bổ sung hỗ trợ cho các tính năng bổ sung được xác định trong PEP 493: "Tính năng: Cấu hình dựa trên môi trường" và "Tính năng: API cấu hình". Tham khảo phần "Red Hat Enterprise Linux 7 Nghị quyết" ở trên để biết thêm chi tiết về các tính năng này.Phiên bản Python được sử dụng trong bộ sưu tập
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
21 dựa trên phiên bản ngược dòng 3.4.2. Tuy nhiên, hỗ trợ PEP 476 đã được đưa vào phiên bản này và được bao gồm kể từ lần phát hành đầu tiên thông qua Rhea-2015: 1058, được phát hành như một phần của Red Hat Software Collection 2.0, với xác minh chứng chỉ được bật theo mặc định. Nó không bao gồm bất kỳ hỗ trợ nào cho PEP 493 và do đó không thể vô hiệu hóa xác minh theo mặc định thông qua tệp cấu hình DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4. Các mẹo khắc phục sự cố được ghi nhận dưới đây cũng có thể áp dụng cho phiên bản này.Phiên bản Python có trong bộ sưu tập
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
23 ban đầu dựa trên phiên bản ngược dòng 2.7.5 và sau đó được cập nhật lên phiên bản ngược dòng 2.7.8, và do đó không thực hiện xác minh chứng chỉ. Hỗ trợ cho PEP 476 lần đầu tiên được thêm vào thông qua RHSA-2016: 1166 được phát hành như một phần của Bộ sưu tập phần mềm Red Hat 2.2.
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Bản cập nhật RHSA-2016: 1166 bổ sung hỗ trợ cho PEP 476, tuy nhiên do lý do tương thích ngược, nó vô hiệu hóa xác minh chứng chỉ theo mặc định. Nó cũng thực hiện hỗ trợ cho tệp cấu hình
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4 được mô tả trong phần "Backporting PEP 476 đến các phiên bản Python trước đó" của PEP 493. Bộ sưu tập DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
23 lưu trữ tệp cấu hình DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4 trong thư mục DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
27 thay vì thư mục DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
28. Với hỗ trợ này, xác minh chứng chỉ có thể được bật theo mặc định.Sự hỗ trợ cho PEP 493 trong bộ sưu tập
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
23 đã được mở rộng thêm thông qua RHSA-2017: 1162 được phát hành như một phần của Red Hat Software Collection 2.4. Erratum đó cập nhật Python lên phiên bản 2.7.13 và do đó cho phép xác minh chứng chỉ theo mặc định. Nó cũng bổ sung hỗ trợ cho các tính năng bổ sung được xác định trong PEP 493: "Tính năng: Cấu hình dựa trên môi trường" và "Tính năng: API cấu hình". Tham khảo phần "Red Hat Enterprise Linux 7 Nghị quyết" ở trên để biết thêm chi tiết về các tính năng này.Kiểm soát xác minh chứng chỉ
Các gói Python có hỗ trợ PEP 476 và PEP 493 như được vận chuyển với các sản phẩm Red Hat cho phép quản trị viên hệ thống đặt xem liệu xác minh chứng nhận có nên được bật hoặc tắt theo mặc định thông qua tệp cấu hình theo kiểu Ini:Nếu mặc định toàn cầu được cấu hình trên hệ thống thông qua
4 là thực hiện xác minh chứng nhận và một số chương trình cần chạy với xác minh bị vô hiệu hóa, trình thông dịch Python có thể được gọi theo cách sau để vô hiệu hóa xác minh:DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
8DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Xác minh chứng chỉ khắc phục sự cố
Khi Python được cấu hình để thực hiện xác minh chứng chỉ cho các kết nối máy khách HTTPS, một số kết nối có thể không thành công do xác minh không thành công. Chương trình ngắn sau đây có thể được sử dụng để chứng minh các lỗi phổ biến nhất có thể gặp phải.
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
9Lỗi phổ biến nhất xảy ra khi kết nối với máy chủ HTTPS trình bày chứng chỉ do CA không xác định: không xác định:
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
0Theo mặc định, mô -đun Python
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
5 sử dụng gói chứng chỉ CA hệ thống - DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
86 - được vận chuyển như một phần của gói DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
87. Bên trong mạng nội bộ của công ty, các máy chủ thường sử dụng chứng chỉ do CA công ty nội bộ cấp thay vì bởi một internet công cộng CA. Bất kỳ chương trình bị ảnh hưởng nào phải được cấu hình để sử dụng chứng chỉ CA nội bộ để có thể xác minh thành công các chứng chỉ của các máy chủ đó. Các phương pháp sau không yêu cầu bất kỳ sửa đổi chương trình nào có thể được sử dụng để làm cho chúng chứng nhận tin cậy từ CA công ty:Thêm chứng chỉ của CA vào gói chứng chỉ hệ thống. Tham khảo trang hướng dẫn
88 để biết thêm thông tin về cách thêm chứng chỉ mới vào gói. Lưu ý rằng một khi nó được thêm vào, các chương trình khác sử dụng gói chứng chỉ hệ thống cũng sẽ tin tưởng bất kỳ chứng chỉ nào do CA. Do đó, điều này chỉ nên được thực hiện cho Ca.DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Sử dụng môi trường của chương trình để chỉ định các chứng chỉ CA đáng tin cậy bổ sung cho một cuộc gọi chương trình cụ thể. Các biến môi trường
89 vàDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
90 có thể được sử dụng để chỉ định chứng chỉ CA hoặc chứng chỉ đáng tin cậy bổ sung. Ví dụ: lưu chứng chỉ CA [ở định dạng PEM hoặc DER] vào một tệp và đặt đường dẫn của nó làm giá trị choDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
89:DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
8DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Một vấn đề khác có thể gặp phải là khi máy chủ HTTPS đích có chứng chỉ do một trong những CAS đáng tin cậy cấp, nhưng nó được cấp cho một tên máy chủ khác. Một lỗi như điều này được báo cáo trong trường hợp như vậy:
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
9Một trong những tên máy chủ được ghi trong chứng chỉ máy chủ nên được sử dụng khi kết nối với máy chủ như vậy. Nếu cả hai tên được liệt kê có thể được sử dụng, máy chủ sẽ có chứng chỉ phù hợp được tạo hoặc xác minh chứng chỉ cần phải được vô hiệu hóa trong các máy khách kết nối với nó.
Sửa đổi các chương trình Python để kiểm soát xác minh chứng chỉ
Văn bản ở trên mô tả các phương thức để kiểm soát xác minh chứng chỉ mà không cần sửa đổi các chương trình Python - sử dụng tệp cấu hình và biến môi trường
DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
4. Các chương trình Python cũng có thể được sửa đổi để áp dụng cài đặt của riêng họ để xác minh chứng chỉ bất kể mặc định hệ thống.Các chương trình trực tiếp sử dụng
93 có thể chỉ định một tệp có chứng chỉ CA đáng tin cậy bằng tham sốDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
94. Đây là một giải pháp thay thế cho việc sử dụng các biến môi trườngDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
89 vàDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
90. Xem tài liệu mô -đunDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
5 để biết chi tiết.DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Thay thế trực tiếp bằng cách sử dụng
93, các chương trình có thể tạoDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
99 để lưu trữ cấu hình và dữ liệu cần thiết cho các kết nối TLS/SSL và sử dụng phương thứcDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
00 của nó.DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
99 có thể được cấu hình với vị trí của các chứng chỉ CA đáng tin cậy [tương tự nhưDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
93 được mô tả ở trên], nhưng cũng có thể được cấu hình để vô hiệu hóa kiểm tra tên máy chủ máy chủ. Xem tài liệu mô -đunDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
5 để biết chi tiết.DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Các mô -đun máy khách HTTP/HTTPS bên trong thư viện tiêu chuẩn Python hiện chấp nhận
99 để cho phép tùy chỉnh cài đặt mặc định của chúng cho các kết nối TLS/SSL, bao gồm xác minh chứng chỉ.Xem tài liệu mô -đunDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
0 vàDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
2 để biết chi tiết.DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Hàm
07 có thể được sử dụng để tạoDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
99 chưa được xác minh - một bối cảnh với việc vô hiệu hóa tất cả xác minh chứng chỉ.Bối cảnh như vậy có thể được chuyển đến các mô -đunDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
0 hoặcDefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
2 để vô hiệu hóa xác minh cho các kết nối riêng lẻ hoặc đặt làm bối cảnh mặc định cho tất cả các kết nối HTTPS tiếp theo.Xem phần "chọn ra" của PEP 476 để biết chi tiết và ví dụ mã.DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']
Khi sử dụng phiên bản Python thực hiện "API cấu hình" được xác định trong PEP 493, hàm
9 có thể được sử dụng để kiểm soát xem bối cảnh được xác minh hay chưa được xác minh được sử dụng theo mặc định cho tất cả các kết nối HTTPS tiếp theo.DefaultVerifyPaths[cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs']