java 获取服务器证书_JAVA:提取服务器证书

我需要帮助以获取适当的代码以获取服务器证书-有效和无效,由CA签名和自签名.任何链接和参考将不胜感激.

我有一个UNIX命令,该命令可以提供所需的信息,但我希望使用Java获得相同的输出. UNIX中的命令是这样的-

echo -n | openssl s_client -connect www.gmail.com:443 -showcerts | sed -ne’/ -BEGIN CERTIFICATE-/,/-END CERTIFICATE- / p’> /tmp/$SERVERNAME.cert

这将返回gmail上的(不知道加密)证书链.我希望我的java程序提供完全相同的信息.打印整个证书链.

解决方法:

可以使用以下步骤完成此操作:

>使用可信任任何内容的TrustManager初始化SSLContext(此用例是使用这种信任管理器的极少数原因之一).仅当您怀疑远程证书不受信任时.

>从中获取一个SSLSocketFactory.

>使用要连接的主机名从该工厂创建一个SSLSocket.如果使用主机名(而不是InetAddress),这将在Java 7上启用SNI,因此等效于-servername作为openssl命令的附加选项.

>开始握手(例如,使用startHandhsake())

>从此SSLSocket获取SSLSession.

>对于getPeerCertificates()中的每个证书:

>使用getEncoded()获得其编码值(作为byte [])

>将其转换为PEM,可以:

>使用BouncyCastle的PEMWriter.

>使用Base 64编码器(例如Apache Commons),添加BEGIN / END分隔符,并每64个字符用新行分隔字符串.

标签:ssl,certificate,openssl,java

来源: https://codeday.me/bug/20191030/1967023.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值