当前位置: 首页 > 知识库问答 >
问题:

在HttpURLConnection中容纳HTTPS连接

石正奇
2023-03-14
        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);

            }
        }
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服务器上。

有人吗?

共有1个答案

凌永逸
2023-03-14

为了让https首先工作,您需要将SSL证书添加到Java的信任存储中······为此,您必须遵循以下步骤:

通常,所用JVM的truststore文件位于%java_home%\lib\security\cacerts

您可以首先通过运行以下命令查看证书是否已经添加到truststore中:

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

一旦确认它没有添加到Java信任存储区,就可以使用以下命令添加它:

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

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

希望能有所帮助!

 类似资料:
  • 问题内容: 我正在尝试获取用户输入的网址的图标,例如 我使用HttpUrlConnection 从主机URL 的扩展名中获取网站图标的位图。 但是,由于用户可能不会指定或,所以我必须自己添加它。我遇到的问题是,如果我在url前面添加,一切都会正常运行,但是对于,某些网站会返回该网站图标,而其他网站只会给我null。我如何找出使用哪个页面?我应该为每种情况添加吗?是否有任何网站严格限制并会返回nul

  • 问题内容: 我正在尝试验证目标是否公开了https Web服务。我有通过HTTP连接的代码,但不确定如何通过HTTPS连接。我已经阅读过您使用SSL,但我也阅读过它不支持证书错误。我得到的代码来自python docs: 有谁知道如何连接到HTTPS? 我已经尝试过HTTPSConenction,但是它以错误代码响应,声称httplib没有属性HTTPSConnection。我也没有socket.

  • 问题内容: 我正在做一个https帖子,但是却得到ssl异常的一个例外,不受信任的服务器证书。如果我做正常的HTTP,它工作正常。我是否必须以某种方式接受服务器证书? 问题答案: 我正在猜测,但是如果你想进行实际的握手,则必须让android知道你的证书。如果你只想接受任何内容,请使用以下伪代码通过Apache HTTP Client获得所需的内容: CustomSSLSocketFactory:

  • 我正在尝试通过< code>apiserver proxy连接到< code > sky DNS < code > etcd 服务器,使用此文档http://kubernetes . io/docs/user-guide/access-the-cluster/# manually-constructing-API server-proxy-URLs命令 curl--cacert /etc/kube

  • 问题是,我想写一个Java程序来增加特定URL的页面点击量。目前我只是在网上冲浪,并得到一些基本的程序来做测试。然而,我甚至无法使程序运行...下面是我的程序和相关输出。 Eclipse、Java程序: 以下是输出: 线程“main”java.net.ConnectException:连接超时:java.net.plainsockeTimpl.SocketConnect(本机方法)java.net

  • 我试图测试一个具有类似下面的ELB的REST API:https://systemtest-inventory.com/v1/inventory/getinventory 当我用邮差chrome尝试URL时,它给了我有效的响应。但当我尝试在Java程序中使用它时,如下所示: