如何在Linux操作系统上自动从networkingstream量中提取X.509证书

如果有人能指点我,我将不胜感激如何在Linux操作系统的客户端和服务器之间的握手阶段自动从实时networkingstream量中提取X.509证书。

一段时间后,一个类似的问题被问到安静从networking或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文件的参与,给出了手动提取证书的方法。

任何人都可以帮助修改上面的命令,以适应我的要求,或build议任何其他替代方法做同样的。

您是否试图从数据包捕获中特别提取它,或者您是否希望在握手期间从命令行获取证书?

如果您只需要获取证书本身,则可以执行以下操作:

 echo | openssl s_client -connect sub.domain.tld:443 | openssl x509 -noout -text 

如果你运行这个命令而不回滚到openssl ,那么你可以看到关于证书的更多细节,但是第二个openssl命令提取证书本身。

为了使OpenSSL shell能够干净地退出以返回到Bash提示符,需要使用echopipe道。

这显然会写一切到标准输出。 如果要保存证书,则需要使用> filename.crt结束命令redirect到> filename.crt 。 如果证书链中有任何错误,它们将不会在文件中结束,而是写入STDERR。