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

错误Java连接HTTPS与SSL证书

封梓
2023-03-14

我在Java中与SSL连接有问题。

我使用java 1.7.80和S. O.: ubuntu 14.04

我的问题是证书,甚至证书。我有四个必须使用pkcs12格式连接的元素。

testservizi。法图拉。信息技术cer--

SDI-11036210158--

CAEntratetest.cer--

private.key--

1) 步骤-将文件cer转换为文件pem

$ openssl x509 -in CAEntratetest.cer -outform PEM -out CAEntratetest.pem
$ openssl x509 -in SDI-11036210158.cer -inform DER -out SDI-11036210158.pem -outform PEM
$ openssl x509 -in testservizi.fatturapa.it.cer -inform DER -out testservizi.fatturapa.it.pem -outform PEM

2)步骤-创建链证书的联合pem文件

$ cat CAEntratetest.pem SDI-11036210158.pem testservizi.fatturapa.it.pem > sum_cert.pem

3)步骤-创建p12文件

$ openssl pkcs12 -export -in sum_cert.pem -inkey private.key -out sogei_auth.p12 -name sogei_auth

好啊我的第一个测试是在浏览器(Mozilla Firefox)中导入p12文件以验证操作。导入成功,此时我输入url

https://testservizi.fatturapa.it/ricevi_file

他回答说:

你好这是一个Axis2 Web服务!

...完美的作品!!

现在我必须让它与java一起工作,并创建一个测试客户机

import java.io.File;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;

public class TestHTTPSClient {

    public static void main(String[] args) throws Exception {
        SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(new File("C:/testSSL/sogei_auth.p12"), "changeit".toCharArray()).build();
        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext);
        CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
        try {
            HttpGet httpget = new HttpGet("https://testservizi.fatturapa.it/ricevi_file");
            System.out.println("executing request " + httpget.getRequestLine());
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                HttpEntity entity = response.getEntity();
                System.out.println("----------------------------------------");
                System.out.println(response.getStatusLine());
                EntityUtils.consume(entity);
            } finally {
                response.close();
            }
        } finally {
            httpclient.close();
        }
    }
}

2)在java.security中更改格式keystore,否则无法读取文件p12

密钥库。类型=jks

改变成

密钥库。类型=pkcs12

3) 开始用java进行测试,我回答了一个错误

Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
...
..
.
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
... 26 more

你能帮我...

共有1个答案

龙洛城
2023-03-14

如果不需要运行时认证,您可以存储在jre cacerts文件中以永久解决此问题!请检查此答案以将证书安装到cacerts。。。

并从您的源代码中删除所有与认证相关的代码!请澄清您是否只想执行此运行时而不是手动执行。

 类似资料:
  • null 但我想知道有没有办法解决这个问题...

  • 问题内容: 链接 [a如何创建https服务器?docs.nodejitsu.com] 但我收到类似的错误 curl:(35)连接到本地主机的未知SSL协议错误:-9838 为什么? 问题答案: 我使用错误的方式创建证书。 这是错误的: 这是创建可以使用的证书的方法:

  • 问题内容: 我一直在研究从动态Web应用程序中提取信息的程序,该程序运行良好,直到我将tomcat服务器设置为使用具有自签名(因此,不受信任)证书的SSL。错误的堆栈跟踪为: 在Web浏览器中,当用户使用不受信任的证书访问HTTPS站点时,系统会提示用户警告,并要求他设置是否愿意继续进行操作;我想为我的命令行应用程序实现类似的功能…我承认我是套接字编程和网络领域的新手。解决这个问题的任何建议都会很

  • 问题内容: Apache Http客户端。您可以在此处查看相关代码: 这是每个人都用来忽略SSL证书错误的方法(仅将其设置为登台,它将不会在生产中使用)。但是,我仍然收到以下异常/堆栈跟踪: 任何提示都很好。如果我做的TrustManager错误,或者我应该以不同的方式执行HTTP Post方法,则可以选择两种方式。 谢谢! 问题答案: 首先,不要 忽略 证书错误。与他们打交道。忽略证书错误将打开