Yêu cầu xác minh chứng chỉ SSL cho yêu cầu HTTPS, giống như trình duyệt web. Chứng chỉ SSL là các tệp dữ liệu nhỏ liên kết kỹ thuật số khóa mật mã với thông tin chi tiết của tổ chức. Thông thường, một trang web có chứng chỉ SSL được gọi là trang web an toàn. Theo mặc định, xác minh SSL được bật và Yêu cầu sẽ đưa ra lỗi SSLError nếu không thể xác minh chứng chỉ Show
Tắt xác minh chứng chỉ SSLHãy để chúng tôi thử truy cập một trang web có chứng chỉ SSL không hợp lệ, sử dụng các yêu cầu Python Python3s = requests.Session() s.cert = '/path/client.cert'9 s = requests.Session() s.cert = '/path/client.cert'0 s = requests.Session() s.cert = '/path/client.cert'1
s = requests.Session() s.cert = '/path/client.cert'2 s = requests.Session() s.cert = '/path/client.cert'3 s = requests.Session() s.cert = '/path/client.cert'4 s = requests.Session() s.cert = '/path/client.cert'5 s = requests.Session() s.cert = '/path/client.cert'0 s = requests.Session() s.cert = '/path/client.cert'1
s = requests.Session() s.cert = '/path/client.cert'2 s = requests.Session() s.cert = '/path/client.cert'3 s = requests.Session() s.cert = '/path/client.cert'4 Đầu ra. - Trang web này không có thiết lập SSL nên phát sinh lỗi này. Python3s = requests.Session() s.cert = '/path/client.cert'9 s = requests.Session() s.cert = '/path/client.cert'0 s = requests.Session() s.cert = '/path/client.cert'1
s = requests.Session() s.cert = '/path/client.cert'2 s = requests.Session() s.cert = '/path/client.cert'3 s = requests.Session() s.cert = '/path/client.cert'4 s = requests.Session() s.cert = '/path/client.cert'5 s = requests.Session() s.cert = '/path/client.cert'0 >>> requests.get('https://kennethreitz.org', cert='/wrong_path/client.pem') SSLError: [Errno 336265225] _ssl.c:347: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib3 s = requests.Session() s.cert = '/path/client.cert'4 >>> requests.get('https://kennethreitz.org', cert='/wrong_path/client.pem') SSLError: [Errno 336265225] _ssl.c:347: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib5 s = requests.Session() s.cert = '/path/client.cert'1
s = requests.Session() s.cert = '/path/client.cert'2 s = requests.Session() s.cert = '/path/client.cert'3 s = requests.Session() s.cert = '/path/client.cert'4 đầu ra Vì phản hồi đầu ra 200 được in, chúng tôi có thể cho rằng yêu cầu đó đã thành công. Xác minh SSL thủ côngngười ta cũng có thể chuyển liên kết đến chứng chỉ để xác thực chỉ thông qua các yêu cầu python. Python3s = requests.Session() s.cert = '/path/client.cert'9 s = requests.Session() s.cert = '/path/client.cert'0 s = requests.Session() s.cert = '/path/client.cert'1
s = requests.Session() s.cert = '/path/client.cert'2 s = requests.Session() s.cert = '/path/client.cert'3 s = requests.Session() s.cert = '/path/client.cert'4 s = requests.Session() s.cert = '/path/client.cert'5 s = requests.Session() s.cert = '/path/client.cert'97 >>> requests.get('https://kennethreitz.org', cert='/wrong_path/client.pem') SSLError: [Errno 336265225] _ssl.c:347: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib3 s = requests.Session() s.cert = '/path/client.cert'4 s = requests.Session() s.cert = '/path/client.cert'00 s = requests.Session() s.cert = '/path/client.cert'1
s = requests.Session() s.cert = '/path/client.cert'2 s = requests.Session() s.cert = '/path/client.cert'3 s = requests.Session() s.cert = '/path/client.cert'4 Điều này sẽ hoạt động trong trường hợp đường dẫn được cung cấp là chính xác cho chứng chỉ SSL cho github. com. Chứng chỉ phía máy kháchBạn cũng có thể chỉ định một chứng chỉ cục bộ để sử dụng làm chứng chỉ phía máy khách, dưới dạng một tệp (chứa khóa riêng và chứng chỉ) hoặc dưới dạng một bộ đường dẫn của cả hai tệp. Gần đây, tôi đã làm việc với mô-đun yêu cầu Python để bảo mật lệnh gọi API bằng chứng chỉ của máy chủ Tôi đã thực sự bế tắc tại một thời điểm và việc tìm hiểu những gì tôi đã làm để khắc phục sự cố đó thật tuyệt vời và đã khiến tôi tạo một bài đăng về tìm hiểu sâu về chứng chỉ SSL Ảnh của Andrea Piacquadio từ PexelsVấn đềTôi đang sử dụng mô-đun yêu cầu và đây là lệnh gọi API s = requests.Session() s.cert = '/path/client.cert'7 và đã nhận được một lỗi s = requests.Session() s.cert = '/path/client.cert'8Nỗ lực 1. Thực hiện cuộc gọi không an toàn với verify=FalseLần thử đầu tiên của tôi là sử dụng cờ xác minh là s = requests.Session() s.cert = '/path/client.cert'81 và thử s = requests.Session() s.cert = '/path/client.cert'0 Mặc dù tôi đạt 200, nhưng tôi đã nhận được một cảnh báo khó chịu xác nhận rằng tôi đang làm một công việc tồi tệ, không cung cấp chứng chỉ. Vì vậy, tôi đã phải tìm đúng cách để làm điều đó 2. Cung cấp chứng chỉ máy chủĐầu tiên tôi nghĩ, nếu tôi có thể cung cấp chứng chỉ máy chủ trong khóa xác minh, nó sẽ thực hiện thủ thuật. Tôi cũng vậy, s = requests.Session() s.cert = '/path/client.cert'1
tôi gặp một lỗi khác s = requests.Session() s.cert = '/path/client.cert'2 3. Ghi đè CA_REQUESTS_BUNDLECác yêu cầu mô-đun sử dụng certifi để truy cập gói CA và xác thực các kết nối SSL an toàn và chúng tôi có thể sử dụng biến môi trường CA_REQUESTS_BUNDLE để ghi đè vị trí gói CA. Vì vậy, tôi nghĩ, nếu tôi có thể cung cấp máy chủ theo cách thủ công. cer trong biến đó, tôi sẽ đạt được giác ngộ. Nhưng với sự tuyệt vọng của tôi, điều đó cũng thất bại 4. Chuyển đổi sang mã hóa chứng chỉ khácSau đó, tôi nghĩ rằng mô-đun yêu cầu không được lấy chứng chỉ được mã hóa DER. Vì vậy, tôi đã chuyển đổi sang PEM là văn bản gốc nhưng được mã hóa Base 64 s = requests.Session() s.cert = '/path/client.cert'3 và gọi lại s = requests.Session() s.cert = '/path/client.cert'4 lỗi khác s = requests.Session() s.cert = '/path/client.cert'8 Vâng, điều này giống như Lỗi 1. Vì vậy, chúng tôi trở lại hình vuông 1. Tôi đã cố gắng tìm kiếm trên internet, nhưng không ai có giải pháp có ý nghĩa. Người nào Sau đó, tôi nghĩ đây không phải là cách, tôi sẽ giải quyết vấn đề này. Vì vậy, tôi đã nghiên cứu rất nhiều về Chứng chỉ và cuối cùng tôi đã nhận được. Tôi đã viết bài Deep Dive và đặt mọi thứ ở đó Trở lại vấn đề cơ bản Vấn đề và tất cả các vấn đề tương tự liên quan đến chứng chỉ (trong bất kỳ ngôn ngữ nào, không chỉ python) trên internet yêu cầu hiểu biết rõ ràng và rõ ràng về chuỗi chứng chỉ. Tôi đã giải thích rất rõ ràng mọi thứ trong bài viết chuyên sâu của mình Thông thường, chuỗi chứng chỉ bao gồm 3 bên
Việc ủy thác trách nhiệm là
Chứng chỉ gốc từ Root CA thường có thời hạn sử dụng rất dài (hơn 20 năm) và được đóng gói dưới dạng gói CA trong tất cả các máy tính và máy chủ và được lưu giữ rất an toàn theo các quy tắc nghiêm ngặt để không ai có thể thay đổi chúng trong bất kỳ máy nào Vì Root CA rất thiêng liêng, chúng cần các CA trung gian ủy thác trách nhiệm ký chứng chỉ máy chủ khi bất kỳ ai yêu cầu bằng cách cung cấp CSR. Các trung gian này được gọi là CA trung gian. Có thể có nhiều CA trung gian trong chuỗi chứng chỉ Dung dịch Trong trường hợp của chúng tôi, khi chúng tôi chuyển đổi tệp chứng chỉ sang định dạng PEM, chúng tôi gặp lỗi, s = requests.Session() s.cert = '/path/client.cert'6 Điều đó xảy ra vì 2 lý do
Vì vậy, tôi đã tước chứng chỉ máy chủ theo cách thủ công như thế này Ví dụ về cách tước tất cả chứng chỉ từ chuỗi chứng chỉĐiều này được thực hiện trong windows, nhưng những điều tương tự có thể được thực hiện trong Mac hoặc Linux Sau khi tước tất cả các chứng chỉ từ máy chủ. cer, chúng tôi sẽ có khác nhau. cer cho tất cả các CA. Vì vậy, đối với trường hợp trên, chúng ta sẽ có 4. tập tin cer
Bây giờ tất cả những gì chúng ta phải làm là chuyển đổi tất cả những. tập tin cer để. pem và thêm chúng lại với nhau để tạo tệp pem hợp nhất và cung cấp tệp đó cho các yêu cầu python Vì vậy, đối với tất cả các tệp cer, hãy chạy lệnh sau 4 lần s = requests.Session() s.cert = '/path/client.cert'7
Thế là xong, chúng tôi cung cấp tệp CA pem mới của mình cho các yêu cầu python và thật vui s = requests.Session() s.cert = '/path/client.cert'80 Nếu bạn thích bài viết này, xin vui lòng chia sẻ hoặc bình luận về bài viết. Bất kỳ loại tương tác được đánh giá cao. Nếu bạn muốn hỗ trợ tôi và có quyền truy cập vào tất cả những điều tuyệt vời trong phương tiện, vui lòng tham gia và trở thành thành viên. Đây là liên kết giới thiệu của tôi Tham gia Medium với liên kết giới thiệu của tôi - Supratim SamantaLà thành viên Phương tiện, một phần phí thành viên của bạn sẽ được chuyển đến các tác giả mà bạn đã đọc và bạn có toàn quyền truy cập vào mọi câu chuyện…susamn. vừa phải. com Tăng cấp mã hóa Cảm ơn vì đã là một phần của cộng đồng của chúng tôi. Tăng cấp đang chuyển đổi tuyển dụng công nghệ. Tìm công việc hoàn hảo của bạn tại các công ty tốt nhất Python tìm ca ở đâuTheo mặc định, mô-đun ssl của Python sử dụng gói chứng chỉ CA hệ thống - /etc/pki/tls/certs/ca-bundle. crt - được vận chuyển như một phần của gói chứng chỉ ca.
Chứng chỉ trong Python là gì?Giấy chứng nhận. Chứng chỉ SSL Python . Certifi cung cấp bộ sưu tập Chứng chỉ gốc được quản lý cẩn thận của Mozilla để xác thực độ tin cậy của chứng chỉ SSL trong khi xác minh danh tính của máy chủ TLS. Nó đã được trích xuất từ dự án Requests.
Pip có sử dụng chứng chỉ không?Theo mặc định, pip sẽ thực hiện xác minh chứng chỉ SSL cho các kết nối mạng mà nó thực hiện qua HTTPS. Chúng phục vụ để ngăn chặn các cuộc tấn công trung gian đối với các gói tải xuống. Điều này không sử dụng kho chứng chỉ hệ thống mà thay vào đó, sử dụng kho chứng chỉ CA đi kèm từ certifi .
Yêu cầu có sử dụng certifi không?Yêu cầu sử dụng chứng chỉ từ gói certifi . Điều này cho phép người dùng cập nhật chứng chỉ đáng tin cậy của họ mà không thay đổi phiên bản Yêu cầu. Trước phiên bản 2. 16, Các yêu cầu bao gồm một tập hợp các CA gốc mà nó tin cậy, có nguồn gốc từ cửa hàng tin cậy Mozilla. |