Java 中的 Https 连接

Java 中的 Https 连接

我已经成功使用生成了密钥库

keytool -genkeypair -alias SomeAlias -keyalg RSA -validity 365 -keystore NAME.keystore -storetype JKS

将其放在 tomcat 配置目录中,并更新 server.xml 文件以启用 8443 端口监听。

所以我可以访问https://localhost:8443/MyApp

但是当我尝试发布一些数据时https://localhost:8443/MyApphttps://localhost:8443/MyApp

sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径

我的 POST 函数:

    public void HttpsPostData(String data, URL url){
    try {
        String encodedData = URLEncoder.encode("data", "UTF-8") + "=" + URLEncoder.encode(data, "UTF-8");
        HttpsURLConnection con = (HttpsURLConnection)url.openConnection();

        con.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
        wr.write(encodedData);
        wr.flush();

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));

        String inputLine;

        while ((inputLine = in.readLine()) != null)
        {
            System.out.println(inputLine); 
        }

        in.close();
    } catch (IOException ex) {
        Logger.getLogger(Sender.class.getName()).log(Level.SEVERE, null, ex);
    }
}

我错过了什么?

答案1

您必须信任服务器证书,即使它是 localhost。最简单的方法可能是使用名为安装证书. 查看博客文章这里

快速步骤:

  1. 使用 编译 InstallCert.java javac InstallCert.java
  2. 调用java InstallCert localhost:8443,信任该证书,InstallCert 将生成一个名为的文件jssecacerts
  3. 复制jssecacerts到你的JDK目录下的目录下jre/lib/security

并且程序应该能够信任该证书。

相关内容