Đây là tất cả được giải thích trong phần xác minh chứng nhận SSL của tài liệu requests
.
Theo mặc định, requests
sử dụng các certs từ certifi
nếu có, rơi trở lại bất cứ điều gì urllib3
nghĩ là cửa hàng chứng nhận hệ điều hành của bạn, chính nó rơi vào bất cứ điều gì Python nghĩ rằng nó là [mặc dù trong các phiên bản cũ hơn nó thường không].
Công ty của bạn rõ ràng có một chứng chỉ riêng tư, thậm chí có thể tự ký, sẽ không có trong certifi
. Nó có thể nằm trong cửa hàng Windows Cert, trong trường hợp đó urllib3
sẽ tự động nhận nó lên nhưng tôi nghi ngờ rằng nó không phải là. Có thể chứng chỉ được cài đặt trực tiếp vào một số thiết lập trình duyệt tùy chỉnh của bạn, bộ phận CNTT của bạn buộc bạn phải sử dụng, thay vì vào cửa hàng OS. Hoặc có thể nó chưa được cài đặt. [Bạn đã không đề cập đến việc có thể truy cập trang web này trong trình duyệt mà không thấy biểu tượng khóa bị hỏng]]
Bạn đang chuyển --no check certificate
[hoặc, nhiều khả năng, ____1010?] Cho
requests.get[url, verify='/path/to/cert']
1, vì vậy bạn không xác minh SSL. Và nếu bạn muốn làm điều tương tự trong requests
, đó chỉ là:requests.get[url, verify=False]
Nếu bạn khá chắc chắn rằng bạn đã cài đặt chứng chỉ, mặc dù
requests.get[url, verify='/path/to/cert']
1 không thể tìm thấy nó, nhưng mã của bạn sẽ không hoạt động như đã viết. Đây là những gì sẽ làm việc:- Bỏ qua chứng chỉ và chỉ vô hiệu hóa xác thực, như được hiển thị ở trên.
- Tìm ra nơi chứng chỉ có liên quan thực sự được cài đặt và cách tải nó, và:
- Vượt qua nó dưới dạng đối số
4 trên mỗi cuộc gọirequests.get[url, verify='/path/to/cert']
requests
. - Đặt nó ở đâu đó tĩnh và chuyển nó trong một biến môi trường.
- Cài đặt nó vào cửa hàng chứng chỉ mặc định của bạn để mọi thứ hoạt động tự động.
- Viết một
6 cài đặt nó vào phiênrequests.get[url, verify='/path/to/cert']
requests
của bạn.
- Vượt qua nó dưới dạng đối số
Đầu tiên, mã của bạn chỉ đang cố gắng để có được chứng chỉ mặc định theo cách chính xác theo cách mà Python đã làm. Mô -đun
requests.get[url, verify='/path/to/cert']
8 đó chỉ là một backport của những gì đã được tích hợp cho Python 3,4+.Thứ hai, tất cả mã của bạn đang làm là nhận được chứng chỉ, sử dụng nó để tạo ổ cắm SSL, bỏ qua ổ cắm đó và bảo requests
làm điều bình thường của nó. Điều đó sẽ không giúp được gì. Nếu bạn muốn chuyển chứng chỉ cho requests
, bạn sẽ làm điều này:
requests.get[url, verify='/path/to/cert']
… Hoặc đặt nó vào biến môi trường
pip install wincertstore cryptography
1Càng hoặc thực hiện mã
requests.get[url, verify='/path/to/cert']
6 mà tôi đã cho bạn xem trong trò chuyện [và bạn đã tìm thấy một phiên bản cũ, không hoạt động của một nơi nào đó không được xác định]. Xem requests.get[url, verify='/path/to/cert']
6 trong tài liệu nếu bạn thực sự muốn làm điều đó.Như đã đề cập gần đây trong một vài bài đăng, tôi đã viết một vài kịch bản sử dụng Python trên PowerShell thông thường của tôi. Tôi nhanh chóng nhận ra lý do tại sao tôi yêu PowerShell rất nhiều. Nó làm cho các nhiệm vụ tự động hóa rất dễ dàng. Hôm nay, thử thách của Lừa đã được lập trình nhận một chứng chỉ ra khỏi cửa hàng chứng chỉ Windows bằng Python. Trong PowerShell, nó chỉ đơn giản là một vài lệnh. Tuy nhiên, sử dụng Python, có một vài gói được yêu cầu. Sau đó, họ trả lại tất cả các chứng chỉ trong cửa hàng. Sau đó, bạn cần lặp đi lặp lại thông qua họ để tìm một người mà bạn sau đó, so với việc nhận được một trong những bạn muốn.
Bây giờ tôi đã trải qua nỗi đau khi thực hiện nó vì các yêu cầu của mình, tôi sẽ đăng nó nhanh chóng ở đây, vì tôi biết tôi sẽ cần truy cập vào cửa hàng chứng chỉ Windows bằng Python một lần nữa trong tương lai.
Phụ thuộc
Các phụ thuộc cốt lõi là các gói ‘wincertstore‘ và ‘cryptography. Những phụ thuộc này có thể được cài đặt bằng PIP.wincertstore‘ and ‘cryptography‘ packages. These dependences can be installed using PIP.
pip install wincertstore cryptography
Kịch bản
Tập lệnh sau đây sẽ chỉ hoạt động trên máy chủ Windows vì nó sử dụng gói WincertStore để truy cập cửa hàng chứng chỉ Windows và lấy tất cả các chứng chỉ. Có một séc trong tập lệnh để xác minh nó đang được chạy trên máy chủ Windows và nó chỉ được kiểm tra bằng Python 3.8. 'Certname' và 'Thumbprint' biến xác định chứng chỉ nào sẽ được trả về. Các chi tiết cho chứng chỉ đó sau đó được xuất vào bảng điều khiển. Cập nhật các biến Certname và Thumbprint cho chứng chỉ bạn đang tìm cách truy xuất từ cửa hàng chứng chỉ Windows.
The script uses the ‘base64‘ and ‘ssl‘ libraries to decode each certificate and then compares each certificate to the ‘certName‘ and
‘thumbPrint‘ variables that define which certificate is looking to be returned. The details for that certificate are then output to the console. Update the certName and thumbPrint variables for the certificate you are looking to retrieve from the Windows Certificate Store.
Chạy tập lệnh sẽ xuất các thông tin sau cho chứng chỉ được chỉ định bằng các biến CertName và Thumbprint;
- tổ chức phát hành
- vân tay
- môn học
- số seri
- ngày phát hành
- ngày hết hạn
- Tên thay thế chủ đề [các]
- Sử dụng chứng chỉ
Ảnh chụp màn hình dưới đây cho thấy tập lệnh được thực thi.
Bản tóm tắt
Tôi đã đăng bài này để tự cứu mình một vài giờ vào lần tới khi tôi cần làm điều này, và tôi chắc chắn rằng nó cũng sẽ giúp những người khác.