基于Python的簡(jiǎn)單SSL驗(yàn)證腳本示例
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ù)器名稱(chēng)指示符(SNI)。
wrap_socket():使用上下文對(duì)象將現(xiàn)有的套接字轉(zhuǎn)換成一個(gè)SSL連接,這里指定服務(wù)器主機(jī)名作為參數(shù)。
getpeercert():獲取連接到服務(wù)器的證書(shū)信息,并返回一個(gè)字典表示。
捕獲異常:嘗試連接到目標(biāo)域名,并打印出證書(shū)的相關(guān)信息,如果連接失敗或SSL錯(cuò)誤發(fā)生,則捕獲相應(yīng)的異常并打印出錯(cuò)誤消息。
運(yùn)行腳本
要運(yùn)行此腳本,請(qǐng)將其保存為.py文件并在命令行中執(zhí)行如下命令:
python script_name.py
這個(gè)腳本會(huì)輸出目標(biāo)域名的SSL證書(shū)相關(guān)信息,包括域名、組織名稱(chēng)、國(guó)家等,注意,由于涉及實(shí)際的網(wǎng)絡(luò)請(qǐng)求和SSL證書(shū)解析,因此在生產(chǎn)環(huán)境中部署此類(lèi)腳本前應(yīng)先測(cè)試其準(zhǔn)確性和安全性。