linux - 使用 openssl 从服务器获取证书

标签 linux security certificate openssl ssl-certificate

我正在尝试获取远程服务器的证书,然后我可以将其添加到我的 keystore 并在我的 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/

但我得到了同样的错误。

This source说我可以使用那个 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

关于linux - 使用 openssl 从服务器获取证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7885785/

相关文章:

c++ - boost C++ 库 : Unit Test Assertion on % Processor Usage

linux - 在生产环境中运行 CLI 时保持密码抽象

linux - 删除具有给定模式的特殊字符的行

node.js - 什么使字符串/ token 在密码学上是安全的?

security - 我可以使用 cURL 绕过服务器的安全措施吗?

c - 如何使用execve和pipe从读取程序获取数据到主程序?

azure - 如何配置对单个 Blob 存储容器的访问

visual-studio-2008 - 我们是否需要安装中间代码签名证书以获得完全信任的 XBAP/ClickOnce 应用程序?

SSL 证书已更新但更改不可见

java - 从小程序安全警告中删除 "UNKNOWN"发布者