首页 文章

如何在Java中发布HTTPS post请求? [重复]

提问于
浏览
0

这个问题在这里已有答案:

我正在尝试发布HTTPS帖子请求 .

String url = "https://myhttpsurl.com"
URL myurl = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection();
con.setRequestMethod("POST");
String query = "confirmation_number=" + URLEncoder.encode(confNumber, "UTF-8");
con.setRequestProperty("Content-length",String.valueOf(query.length()));
con.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
con.setDoOutput(true);
con.setDoInput(true);

DataOutputStream output = new DataOutputStream(con.getOutputStream());
output.writeBytes(query);

output.close();
System.out.println("Resp Code:"+con.getResponseCode());

我收到以下错误:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在sun.security.ssl.Alerts找到所请求目标的有效证书路径 . get.SLException(Alerts.java:192)at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1904)at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:279)at sun.security.ssl.Handshaker .fatalSE(Handshaker.java:273)at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1446)at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:209)at sun.security.ssl . Handshaker.processLoop(Handshaker.java:913)at sun.security.ssl.Handshaker.process_record(Handshaker.java:849)at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1023)at sun.security.ssl .SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)at sun .security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect (AbstractDelegateHttpsURLConnection.java:185)at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1092)at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)

请提出导致错误的原因

1 回答

  • 2

    Java无法验证https服务器上SSL证书的有效性 . 它可以是自签名的,也可以由Java运行时不知道的证书颁发机构签名 .

    您可以选择通过将证书添加到信任库(cacerts)来手动信任证书,或者将证书签名 . 我不建议完全禁用SSL证书验证,因为您可能会对自己造成意外后果 .

相关问题