Hướng dẫn python use windows certificate store - python sử dụng cửa hàng chứng chỉ windows

Đâ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ố
      requests.get(url, verify='/path/to/cert')
      
      4 trên mỗi cuộc gọi 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
      requests.get(url, verify='/path/to/cert')
      
      6 cài đặt nó vào phiên requests của bạn.

Đầ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
1

Cà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.

Hướng dẫn python use windows certificate store - python sử dụng cửa hàng chứng chỉ windows

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.

Python có sử dụng cửa hàng chứng chỉ windows không?

Trên Windows, Python tự động tải chứng chỉ từ cửa hàng chứng chỉ Windows.Python automatically loads certificates from the Windows certificate store.

Python sử dụng cửa hàng chứng chỉ nào?

Thư viện Python-Certifi-win32 sử dụng cửa hàng chứng chỉ Windows để kiểm tra tính hợp lệ của chứng chỉ.Windows certificate store to check the validity of certificates.

Python lưu trữ chứng chỉ SSL ở đâu?

Theo mặc định, mô -đun SSL Python sử dụng gói chứng chỉ CA hệ thống -/etc/pki/tls/certs/ca -bundle.

Wincertstore là gì?

Wincertstore cung cấp một giao diện để truy cập chứng chỉ CA và CRL của Windows.Nó sử dụng API cửa hàng CERT SYTEM CERT của Windows và Windows thông qua Crypt32.DLL.provides an interface to access Windows' CA and CRL certificates. It uses ctypes and Windows's sytem cert store API through crypt32. dll.