我想从https://www.google.com下载SSL证书,使用wget或任何其他命令。 任何Unix命令行? wget或openssl?
为了下载证书,你需要使用内置于openssl的客户端,如下所示:
echo -n | openssl s_client -connect HOST:PORTNUMBER \ | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
这将把证书保存到/tmp/$SERVERNAME.cert
。
如果要下载链中的所有证书,可以使用-showcerts
。 但是,如果您只是想下载服务器证书,则不需要指定-showcerts
echo -n
给服务器一个响应,以便连接被释放
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
删除有关证书链和连接详细信息。 这是将证书导入其他密钥库的首选格式。
我find了答案。 Openssl提供它。
openssl s_client -connect $ {REMHOST}:$ {REMPORT}
GNUTLS客户端工具gnutls-cli
也可以使这一点变得简单:
gnutls-cli --print-cert www.example.com \ < /dev/null \ > www.example.com.certs
该程序旨在为站点提供交互式客户端,因此您需要为其提供空input(在本例中为/dev/null
)以结束交互式会话。
基于@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
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -in /dev/stdin
openssl的这个模式需要stdin,所以我们通过true |
提供它 ,它将连接到-connect参数中指定的服务器。 2>/dev/null
错误沉默(可选),我们可以将整个输出传递到x509parsing器,指定/dev/stdin
使用shellpipe道作为input文件。 这将输出s_client
输出的-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
部分。 您可以通过将> google.com.pem
添加到该命令的末尾来将其redirect到文件。
尽我所知,这并不validation证书链,它只能告诉你什么SSLterminal服务器提供的身份。
使用Ex和进程replace的替代语法:
ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt