用Python來檢查域名HTTPS證書


最近有個需求需要檢查管理域名證書是否過期, 需要連到各個域名然后下載證書檢查時間, 網上找了一通, 找到了目前來說比較方便的代碼..

import ssl, socket

hostname = 'www.qq.com'
c = ssl.create_default_context()
s = c.wrap_socket(socket.socket(), server_hostname=hostname)
s.connect((hostname, 443))
cert = s.getpeercert()

cert 里面就是證書的詳細信息了, 如下圖所示.

拿到這些信息后, 與當前時間進行對比, 就可以了.

在比較舊的系統上, 有可能出現 certificate verify failed: unable to get local issuer certificate 這種報錯
初步處理辦法:

  1. 更新系統的ca證書 yum update ca-certificates
  2. 重新編譯openssl
  3. 重新編譯Python3

如果這種辦法也無法解決這個報錯的話, 還有另一種方式進行檢查
需要提前安裝pip3 install pyOpenSSL
關鍵代碼如下:

import ssl
import time
import OpenSSL
hostname = 'www.qq.com'
port = 443
cert = ssl.get_server_certificate((hostname, port)).encode()
cert_obj = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
cert_time = int(time.strftime('%s', time.strptime(cert_obj.get_notAfter().decode(), '%Y%m%d%H%M%SZ')))

這樣也是能獲取到啟用了SSL功能服務端口的證書信息的.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM