我想从以下位置下载 SSL 证书:https://www.google.com,使用 wget 或任何其他命令。任何 unix 命令行?wget 还是 openssl?
答案1
为了下载证书,您需要使用 openssl 内置的客户端,如下所示:
</dev/null openssl s_client -connect $HOST:$PORTNUMBER -servername $SERVERNAME \
| openssl x509 > /tmp/$SERVERNAME.cert
这会将证书保存至/tmp/$SERVERNAME.cert
。
-servername
对于 SNI 来说,当出现多个证书时,使用它来选择正确的证书。
如果您想下载链中的所有证书,可以使用-showcerts
。但是如果您只想下载服务器证书,则无需指定-showcerts
。x509
末尾的将删除中间证书,您需要使用sed -n '/-----BEGIN/,/-----END/p'
而不是末尾的 x509。
</dev/null
表示不应向服务器发送任何内容,以便释放连接。
openssl x509
删除有关证书链和连接详细信息的信息。这是将证书导入其他密钥库的首选格式。
答案2
我找到了答案。 Openssl 提供了它。
openssl s_client -连接 ${REMHOST}:${REMPORT}
答案3
这通用网络传输层安全协议客户端工具,gnutls-cli
也可以使这变得简单:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
该程序旨在为网站提供交互式客户端,因此您需要为其提供空输入(在此示例中为来自/dev/null
)以结束交互式会话。
答案4
根据@bignose 的回答,这里有一个独立的版本,非常适合厨师食谱:
sudo apt-get install gnutls-bin
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates