如果有人能告诉我如何在 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。