如果有人能指出如何在 Linux 作業系統上的客戶端和伺服器之間的握手階段自動從即時網路流量中提取 X.509 證書,我將不勝感激。
類似的問題曾被悄悄問過一段時間從網路或 pcap 檔案中提取 SSL 證書但答案並不完整。
答案說使用以下命令
ssldump -Nr file.pcap | awk 'BEGIN {c=0;} { if ($0 ~ /^[ ]+Certificate$/) {c=1; print "========================================";} if ($0 !~ /^ +/ ) {c=0;} if (c==1) print $0; }'
但由於涉及pcap文件,所以需要手動提取證書。
任何人都可以幫助修改上述命令以滿足我的要求或建議任何其他替代方法來執行相同的操作。
答案1
您是想專門從資料包捕獲中提取它,還是想在握手期間從命令列獲取證書?
如果您只需要取得憑證本身,您可以執行以下操作:
echo | openssl s_client -connect sub.domain.tld:443 | openssl x509 -noout -text
如果您運行該命令而不通過管道返回到openssl
,那麼您可以看到有關證書的更多詳細信息,但第二個openssl
命令會提取證書本身。
echo
為了讓 OpenSSL shell 乾淨退出並返回 Bash 提示符,需要使用管道。
顯然,這會將所有內容寫入 STDOUT。如果要儲存證書,則需要通過以> filename.crt
.如果憑證鏈中有任何錯誤,它們不會最終出現在檔案中,而是會寫入 STDERR。