Hướng dẫn where does python look for ssl certificate? - python tìm chứng chỉ ssl ở đâu?

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 requests 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

[https]
verify=enable
1 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

[https]
verify=enable
3 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
[https]
verify=enable
3 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
[https]
verify=enable
7 thay vì thư mục
[https]
verify=enable
8. 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

[https]
verify=enable
3 đã đượ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

$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
0 không triển khai PEP 476 hoặc PEP 493 và sự hỗ trợ của họ dự kiến ​​sẽ không được thêm vào trong các bản cập nhật trong tương lai.

Kiểm soát và xử lý sự cố xác minh chứng chỉ

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:

$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
1. Trong tệp cấu hình này, mặc định cho các máy khách HTTP trong thư viện tiêu chuẩn Python được đặt bằng tùy chọn
$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
2 trong phần
$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
3. Phần có thể trông như thế này:

[https]
verify=enable

Các giá trị hợp lệ là

$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
4 (xác minh được bật theo mặc định),
$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
5 (xác minh được vô hiệu hóa theo mặc định) và
$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
6 (sử dụng mã cứng mặc định cụ thể của nền tảng trong 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). Người dùng được khuyến khích kiểm tra các ứng dụng của họ với
$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
4 và chỉ sử dụng
$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
5 nếu xác minh gây ra vấn đề trong môi trường của họ và chỉ cho đến khi những vấn đề đó có thể được giải quyết (ví dụ: bằng cách đảm bảo rằng cơ quan chứng chỉ (CA) được sử dụng bởi các hệ thống của họ được cấu hình là đáng tin cậy hoặc bằng cách sửa đổi các ứng dụng nên tiếp tục chạy với xác minh bị vô hiệu hóa). Khi giá trị
$ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
6 được sử dụng, mặc định thực tế có thể thay đổi khi các gói Python bổ sung cập nhật với mặc định được mã hóa cứng khác nhau được phát hành trong tương lai.

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
    $ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
    
    4), trình thông dịch Python có thể được gọi theo cách sau để cho phép xác minh:

    $ PYTHONHTTPSVERIFY=1 python /path/to/python-program.py
    
  • 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à 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:

    $ PYTHONHTTPSVERIFY=0 python /path/to/python-program.py
    

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.

#!/usr/bin/env python

try:   
    import urllib2 #python2
except:
    import urllib.request as urllib2 #python3
import sys

req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
urllib2.urlopen(req)

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:

$ python urllib2-test.py https://cdn.redhat.com
...
urllib2.URLError: 

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 -
$ PYTHONHTTPSVERIFY=0 python /path/to/python-program.py
6 - được vận chuyển như một phần của gói
$ PYTHONHTTPSVERIFY=0 python /path/to/python-program.py
7. 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

    $ PYTHONHTTPSVERIFY=0 python /path/to/python-program.py
    
    8 để 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

    $ PYTHONHTTPSVERIFY=0 python /path/to/python-program.py
    
    9 và
    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    0 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
    $ PYTHONHTTPSVERIFY=0 python /path/to/python-program.py
    
    9:

    $ SSL_CERT_FILE=/etc/rhsm/ca/redhat-uep.pem python urllib2-test.py https://cdn.redhat.com/
    

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:

$ python urllib2-test.py https://ev-www.redhat.com.edgekey.net
...
ssl.CertificateError: hostname 'ev-www.redhat.com.edgekey.net' doesn't match either of 'www.redhat.com', 'redhat.com'

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

    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    3 có thể chỉ định một tệp có chứng chỉ CA đáng tin cậy bằng tham số
    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    4. Đây là một giải pháp thay thế cho việc sử dụng các biến môi trường
    $ PYTHONHTTPSVERIFY=0 python /path/to/python-program.py
    
    9 và
    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    0. 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

    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    3, các chương trình có thể tạo
    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    9 để 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
    $ python urllib2-test.py https://cdn.redhat.com
    ...
    urllib2.URLError: 
    
    0 của nó.
    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    9 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ư
    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    3 đượ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

    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    9 để 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

    $ python urllib2-test.py https://cdn.redhat.com
    ...
    urllib2.URLError: 
    
    7 có thể được sử dụng để tạo
    #!/usr/bin/env python
    
    try:   
        import urllib2 #python2
    except:
        import urllib.request as urllib2 #python3
    import sys
    
    req = urllib2.Request(sys.argv[1], headers={'User-Agent':'Mozilla/5.0'})
    urllib2.urlopen(req)
    
    9 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ô -đ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 hoặ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')
    
    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ã.

  • 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.