java - 打印服务器证书详细信息时出现异常

标签 java ssl https certificate

我已经在服务器和客户端之间建立了一个https连接,其中客户端是一个java程序,服务器是一个servlet。我使用以下代码从服务器打印证书详细信息。

URL url = new URL("https://localhost:8443/cert");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(sslsocketfactory);

connection.setDoOutput(true);
if(connection!=null){
    Certificate[] certs = connection.getServerCertificates();// #1 

    System.out.println("Cert Type : " + certs[0].getType());
    System.out.println("Cert Hash Code : " + certs[0].hashCode());
    System.out.println("Cert Public Key Algorithm : " + certs[0].getPublicKey().getAlgorithm());
    System.out.println("Cert Public Key Format : " + certs[0].getPublicKey().getFormat());
    System.out.println("\n");
}

但我收到以下异常。

java.lang.IllegalStateException: connection not yet open

我认为握手应该在调用 url.openconnection() 方法后立即进行。 这里有什么问题?
异常抛出行号“#1”(见上面代码中的注释)

最佳答案

您正在尝试连接到自签名证书主机。按照 this answer 中答案选项 2 的说明进行操作,这应该允许您连接。

我用 connection.connect() 替换了 connection.setDoOutput() 并且代码对我来说工作正常。

不要将此机制用于测试以外的任何用途 - 您应该使用有效签名的证书

关于java - 打印服务器证书详细信息时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9568100/

相关文章:

java - 为不同的运行时设置 Android 代码

java - Java中的简单问题

java - 在 Eclipse 中将非 Android 库项目添加到 Android 应用程序

java - Datastax Cassandra java 驱动程序 - 对象映射器 - 自动创建表

python - Python 2.6.1 中的 urllib2 是否支持通过 https 进行代理

SSL 和绿色 https

ruby-on-rails - 无法验证 https ://rubygems. org/的 SSL 证书

java - 在 Dataflow 中运行 Apache Beam Pipeline 时出现 SSLHandshakeException

amazon-web-services - 当我尝试访问 GeoPy API 时,AWS EC2 实例上出现 SSL 错误

wcf - 更改 WCF 服务以要求 SSL