Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在HttpsURLConnection中正确导入认证?_Java_Ssl_Https_Openssl_Ssl Certificate - Fatal编程技术网

Java 如何在HttpsURLConnection中正确导入认证?

Java 如何在HttpsURLConnection中正确导入认证?,java,ssl,https,openssl,ssl-certificate,Java,Ssl,Https,Openssl,Ssl Certificate,我使用HttpsURLConnection向服务器发送请求。 第一次,我使用了一种简单的方法在JavaHTTPS连接中通过证书验证,它可以正常工作。 (根据网站: ) 但是现在,我得到了一个.pem文件,我需要将它导入我的JVM。 我试图通过keytool-import-file E:\server.pem-alias server-keystore“C:\Program Files\Java\jre7\lib\security\cacerts”将.pem文件导入我的JVM,但我得到了一个错误J

我使用HttpsURLConnection向服务器发送请求。 第一次,我使用了一种简单的方法在JavaHTTPS连接中通过证书验证,它可以正常工作。 (根据网站: )

但是现在,我得到了一个
.pem
文件,我需要将它导入我的JVM。 我试图通过
keytool-import-file E:\server.pem-alias server-keystore“C:\Program Files\Java\jre7\lib\security\cacerts”
.pem
文件导入我的JVM,但我得到了一个错误
Java.lang.Exception:不是X.509

因此,我使用openssl将
.pem
传输到
.der
。然后我通过
keytool-import-file E:\server.der-alias server-keystore“C:\Program Files\Java\jre7\lib\security\cacerts”将
.der
导入到我的JVM中

但是,当我在未通过证书验证的情况下执行代码时,它有一个关于
“javax.net.ssl.SSLHandshakeException:…:PKIX路径生成失败:java.security.cert.CertPathBuilderException:“

我怎样才能解决它?错误是由我自己将
.pem
传输到
.der
引起的吗?服务器是否也必须使用
.der

谢谢

通过证书验证

SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);

// HttpsURLConnection
URL url = new URL(newUrl);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");

connection.setHostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String arg0, SSLSession arg1) {
        return true;
    }
});

connection.connect();
BufferedReader reader = null;
String json;

// read the output from the server
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
json = reader.readLine();
connection.disconnect();
导入证书

导入证书后,是否可以删除一些代码,例如
SSLContext…

// HttpsURLConnection
URL url = new URL(newUrl);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");

connection.connect();
BufferedReader reader = null;
String json;

// read the output from the server
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
json = reader.readLine();
connection.disconnect();
服务器.pem的一部分

-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhk
....
....
4QOYP5BR7kze/gY=
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICSjCCAbOgAwIBAgIJAL9cT+
....
....
bfnoA/x+53HmG0w6fu
x8HXcTCrgsgnYwoMl9A=
-----END CERTIFICATE-----

如果您的服务器具有自签名证书,并且希望忽略证书验证的检查,则可以:)。对我来说非常有效