Hướng dẫn python-certifi-win32 for linux - python-certifi-win32 dành cho linux

Mô tả dự án

LƯU Ý: Gói này đã được thay thế bằng các hệ thống pip-hệ thống và thường không được tính toán. pip-system-certs and is generally unmaintained.

Gói này bản vá Certifi trong thời gian chạy cũng bao gồm các chứng chỉ từ cửa hàng chứng chỉ Windows.

Điều này sẽ cho phép các gói như các yêu cầu [và các công cụ dựa trên nó, như PIP] để xác minh các kết nối TLS/SSL cho các máy chủ mà CA CA được tin tưởng bởi cài đặt Windows của bạn.

Mô -đun này sẽ tự động giữ cho tệp Certifi+Windows Cacert được hợp nhất được cập nhật, ngay cả khi mô -đun Certifi được cập nhật.

Đơn giản chỉ cần cài đặt với:

pip install python-certifi-win32

Và các yêu cầu nên tin tưởng máy chủ của bạn nếu hệ thống máy chủ của bạn thực hiện.

Sự nhìn nhận

Mô-đun này được lấy cảm hứng từ một bản vá cho Python-Certifi để thực hiện chức năng này: //github.com/certifi/python-certifi/pull/54 Phương pháp vá trong thời gian chạy được xây dựng từ mô-đun autowrapt: // pypi.python.org/pypi/autowrapt

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Built Distribution

3

New! Save questions or answers and organize your favorite content. Learn more.
Learn more.

I have a small scirpt which is using the tableau rest api to download data from tableau views. As the script is running in a corporate environment, I have to use SSL. That's where the python-certifi-win32 package comes into play. Installing the package with

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 patches the certifi package to use the local machine certificate store. From the documentation:

This package patches certifi at runtime to also include certificates from the windows certificate store.

This works perfectly fine when I run the script from source, but if I create an executable using pyinstaller [with the

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 option], the "patch at runtime" does not seem to happen and I get a "local certificate could not be validated" error, which is the same that I got before installing the python-certifi-win32 package.

Vì tôi khá mới đối với Python, tôi không thể tìm ra chính xác gói Python-Certifi-Win32 là "bản vá trong thời gian chạy" như thế nào. Tôi đã thử với tùy chọ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']
4 nhưng điều đó không hoạt động.

Bất kỳ gợi ý nào để nói với pyinstaller [hoặc tập lệnh của tôi] để áp dụng "ma thuật Python-certifi-win32" khi được gọi là thực thi?

Đã hỏi ngày 2 tháng 6 năm 2021 lúc 11:08Jun 2, 2021 at 11:08

1

Bạn sẽ không cần phải gây rối với nhập khẩu ẩn, nhưng bạn sẽ cần tự nhập thư viện.

Gói mất một số tự động ma thuật khi thực hiện trong thiết lập thời gian chạy của Pyinstaller. Giải quyết điều này phụ thuộc vào nơi bạn cần Winstore Certs, nhưng đây là những gì tôi làm để làm cho nó hoạt động ở nơi tôi cần nó cho

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:

if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]

Cài đặ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']
6 sẽ chỉ ra các yêu cầu sử dụng cửa hàng mà certifi_win32 tạo ra. Hà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']
7 sẽ kết hợp gói chứng chỉ được vận chuyển với pyinstaller [nằ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']
8] và cửa hàng Wincert. 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']
9 kết quả được ghi vào
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.

Đã trả lời ngày 23 tháng 10 năm 2021 lúc 17:04Oct 23, 2021 at 17:04

BoringDevboringdevboringDev

Huy hiệu Bạc 1111 Huy hiệu Đồng1 silver badge3 bronze badges

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']
5 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

    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 hiện kiểm tra 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']
    
    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ủa
    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']
    
    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.
  • 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

    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']
    
    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.

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

if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
41 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

if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
43 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
if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
43 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
if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
47 thay vì thư mục
if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
48. 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

if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
43 đã đượ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

if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
41 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

if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
43 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
if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
43 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
if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
47 thay vì thư mục
if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
48. 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

if sys.platform == 'win32':
    import certifi_win32
    os.environ['REQUESTS_CA_BUNDLE'] = certifi_win32.wincerts.where[]
    certifi_win32.generate_pem[]
43 đã đượ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.

Khi sử dụng các phiên bản Python hỗ trợ 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']
6, biến đó có thể được sử dụng để đặt mặc định xác minh cho các yêu cầu chương trình cụ thể. Các trường hợp sử dụng điển hình bao gồm:
  • Nếu mặc định toàn cầu được cấu hình trên hệ thống thông qua

    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 là không 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 bật xác minh [ví dụ: kiểm tra xem chương trình có hoạt động chính xác trước khi mặc định toàn cầu được thay đổi thành
    import ssl
    ssl.get_default_verify_paths[]
    
    34], trình thông dịch Python có thể được gọi theo cách sau để cho phép xác minh:
    import ssl
    ssl.get_default_verify_paths[]
    
    3
  • Nếu mặc định toàn cầu được cấu hình trên hệ thống thông qua

    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 là không 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 bật xác minh [ví dụ: kiểm tra xem chương trình có hoạt động chính xác trước khi mặc định toàn cầu được thay đổi thành
    import ssl
    ssl.get_default_verify_paths[]
    
    34], trình thông dịch Python có thể được gọi theo cách sau để cho phép xác minh:
    import ssl
    ssl.get_default_verify_paths[]
    
    3

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 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']
0

Xác minh chứng chỉ khắc phục sự 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']
1

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']
2

Lỗ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:

Theo 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']
    
    06 - đượ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']
    
    07. 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
  • 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']
    
    08 để 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.

    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

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']
09 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']
10 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ị cho
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']
09:
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

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

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:

Mộ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
  • 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']
    
    13 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']
    
    14. Đây là một giải pháp thay thế cho việc sử dụng các 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']
    
    09 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']
    
    10. Xem tài liệu mô -đun
    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 để biết chi tiết.

    Thay thế trực tiếp bằng cách sử dụ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']
    
    13, các chương trình có thể tạo
    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']
    
    19 để 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ứ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']
    
    20 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']
    
    19 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']
    
    13 đượ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ô -đun
    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 để biết chi tiết.

    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
  • 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']
    
    19 để 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ô -đun
    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à
    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.

    Hàm
  • 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

    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']
    
    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.

Bài Viết Liên Quan

Chủ Đề