在HttpURLConnection中容纳HTTPS连接

问题描述 投票:0回答:1

我正在使用HttpURLConnection来执行POST请求。

我读过HttpsURLConnection扩展HttpURLConnection,支持特定于https的功能,如SSL

如果HttpsURLConnection在HttpURLConnection(父类)中使用相同的方法,它会超级调用HttpURLConnection中的方法。

        URL url = new URL(callBackUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setConnectTimeout(setConnectTimeout);
        connection.setReadTimeout(setConnectTimeout);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

        OutputStreamWriter os = new OutputStreamWriter(connection.getOutputStream());
        os.write(data.toString());

        os.flush();
        os.close();

        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            BufferedReader br = new BufferedReader(new InputStreamReader((connection.getInputStream())));

            while ((output = br.readLine()) != null) {
                stringBuffer.append(output);

            }
        }

但是,当我使用HTTPS Url时,我会不断收到以下错误消息。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[na:1.8.0_181]
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1964) ~[na:1.8.0_181]
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:328) ~[na:1.8.0_181]
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:322) ~[na:1.8.0_181]

问题,我如何处理SSL和非SSL连接,就像在PHP中使用CURL一样,设置忽略SSL检查

curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);

我在Linux,Spring框架和TomCat Web服务器上。

任何人?

java spring spring-boot
1个回答
0
投票

要使HTTPS首先工作,您需要将SSL证书添加到Java的信任存储中......为此,您必须执行以下步骤:

通常,您使用的JVM的truststore文件位于%JAVA_HOME%\lib\security\cacerts

您可以通过运行以下命令首先查看您的证书是否已添加到信任库:

keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts"

确认它未添加到Java信任库后,可以使用以下命令添加它:

keytool -import -noprompt -trustcacerts -alias <AliasName> -file   <certificate> -keystore <KeystoreFile> -storepass <Password>

完成以下步骤后,您应该能够运行程序而不会遇到与HTTPS相关的问题。

希望有所帮助!

编辑-1:上述方法有助于在Windows环境中添加SSL证书。请检查以下article的Linux版本......

© www.soinside.com 2019 - 2024. All rights reserved.