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个字符用新行分隔字符串.

上一篇:java-如何向Jenkins内部JDK添加自定义证书?


下一篇:使用Java编写使用ssl / tls的客户端-服务器应用程序,而又无法使用keytool