基于Python的簡單SSL驗證腳本示例
import ssl from urllib.parse import urlparse import socket def check_ssl(hostname): try: context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) with socket.create_connection((hostname, 443)) as sock: with context.wrap_socket(sock, server_hostname=hostname) as ssock: cert = ssock.getpeercert() print("Certificate:") for key, value in cert['subject'].items(): if key == 'CN': common_name = value elif key == 'O' or key == 'OU': organization_name = value elif key == 'C': country_name = value return f"Common Name: {common_name}\nOrganization: {organization_name}\nCountry: {country_name}" except (socket.timeout, ssl.SSLError) as e: return str(e) if __name__ == "__main__": hostname = "example.com" print(check_ssl(hostname))
解釋
導(dǎo)入必要的模塊:ssl
用于處理SSL相關(guān)的操作,urllib.parse
用于解析URL,socket
用于創(chuàng)建和連接TCP套接字。
create_default_context():創(chuàng)建默認(rèn)的SSL上下文,這里是為了處理客戶端認(rèn)證和服務(wù)器名稱指示符(SNI)。
wrap_socket():使用上下文對象將現(xiàn)有的套接字轉(zhuǎn)換成一個SSL連接,這里指定服務(wù)器主機(jī)名作為參數(shù)。
getpeercert():獲取連接到服務(wù)器的證書信息,并返回一個字典表示。
捕獲異常:嘗試連接到目標(biāo)域名,并打印出證書的相關(guān)信息,如果連接失敗或SSL錯誤發(fā)生,則捕獲相應(yīng)的異常并打印出錯誤消息。
運(yùn)行腳本
要運(yùn)行此腳本,請將其保存為.py文件并在命令行中執(zhí)行如下命令:
python script_name.py
這個腳本會輸出目標(biāo)域名的SSL證書相關(guān)信息,包括域名、組織名稱、國家等,注意,由于涉及實際的網(wǎng)絡(luò)請求和SSL證書解析,因此在生產(chǎn)環(huán)境中部署此類腳本前應(yīng)先測試其準(zhǔn)確性和安全性。