如何从网站下载ssl证书?

我想从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