使用openssl从服务器获取证书

我试图获得远程服务器的证书,然后我可以使用它来添加到我的密钥库并在我的Java应用程序中使用。

一位高级开发人员(他正在假期:()通知我我可以运行这个:

openssl s_client -connect host.host:9999

获取原始证书,然后我可以复制并导出。 我收到以下输出:

depth=1 /C=NZ/ST=Test State or Province/O=Organization Name/OU=Organizational Unit Name/CN=Test CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
23177:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1086:SSL alert number 40
23177:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:

我也尝试过这个选项

-showcerts 

和这个(在debian的脑海中运行)

-CApath /etc/ssl/certs/ 

但是得到相同的错误。

该来源说我可以使用该CApath标志,但它似乎没有帮助。 我尝试了多条路径无济于事。

请让我知道我要去哪里错了。


与SNI

如果远程服务器正在使用SNI(即,在一个IP地址上共享多台SSL主机),则需要发送正确的主机名才能获得正确的证书。

openssl s_client -showcerts -servername www.example.com -connect www.example.com:443 </dev/null

没有SNI

如果远程服务器不使用SNI,则可以跳过-servername参数:

openssl s_client -showcerts -connect www.example.com:443 </dev/null


要查看网站证书的完整详细信息,您还可以使用以下命令链:

$ echo | 
    openssl s_client -servername www.example.com -connect www.example.com:443 2>/dev/null | 
    openssl x509 -text

虽然我同意Ari的回答(并且赞成:),但我需要做一些额外的步骤才能在Windows上使用Java(需要部署它):

openssl s_client -showcerts -connect www.example.com:443 < /dev/null | openssl x509 -outform DER > derp.der

在添加openssl x509 -outform DER转换之前,我在Windows上从keytool收到一个错误,抱怨证书的格式。 导入.der文件工作正常。


事实证明,这里有更多的复杂性:我需要提供更多的细节来实现这个转变。 我认为它与它需要客户端身份验证的连接有关,而且需要更多信息才能继续到证书被丢弃的阶段。

这是我的工作命令:

openssl s_client -connect host:port -key our_private_key.pem -showcerts 
                 -cert our_server-signed_cert.pem

希望这对任何能够处理更多信息的人来说都是正确的方向。

链接地址: http://www.djcxy.com/p/59661.html

上一篇: Using openssl to get the certificate from a server

下一篇: Getting Chrome to accept self