使用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