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

异常线程"main"javax.net.ssl.SSLHandshake异常:sun.security.validator.验证器异常:未找到受信任的证书

贺俊杰
2023-03-14

我是自动化测试的第一名。所以,我有一项任务,为API测试创建自动化脚本。我需要创建带有自签名序列号的https请求。这个证书给了我我们的管理员p12扩展名和密码文件。我将此证书导出到。cer延伸。然后我创建了信任存储并将此证书导入该存储。

C:\ProgramFiles(x86)\Java\jdk1。8.0_25\jre\bin

我找到了玛尔塔。cer和客户信托。jks在我的项目附近。我已经在Java上用IntelliJ IDEA 13.1.1编写了代码。

这里是代码:

public void testSimpleHttpsClient() throws CertificateException, InterruptedException, UnrecoverableKeyException, NoSuchAlgorithmException,
        IOException, KeyManagementException, KeyStoreException {


    URL url = new URL("https://intstg1-kaakioskpublicapi.ptstaging.ptec/TLE/36171/player/info");

    HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
    con.setRequestMethod( "GET" );

    SSLContext sslContext = SSLContext.getInstance("TLS");

    char[]  passphrase = "storepass".toCharArray();
    KeyStore ks = KeyStore.getInstance("JKS");
    ks.load(this.getClass().getResourceAsStream("clienttrust.jks"), passphrase);
    System.out.println(ks);

    TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
    tmf.init(ks);

    System.out.println(tmf.toString());

    HostnameVerifier hostnameVerifier = new HostnameVerifier() {

        public boolean verify(String s, SSLSession sslSession) {
            return s.equals(sslSession.getPeerHost());
        }
    };
    con.setHostnameVerifier(hostnameVerifier);

    sslContext.init(null, tmf.getTrustManagers(), null);
   con.setSSLSocketFactory(sslContext.getSocketFactory());

    int responseCode = con.getResponseCode();
    InputStream inputStream;
    if (responseCode == HttpURLConnection.HTTP_OK) {
        inputStream = con.getInputStream();
    } else {
        inputStream = con.getErrorStream();
    }

    // Process the response
    BufferedReader reader;
    String line = null;
    reader = new BufferedReader( new InputStreamReader( inputStream ) );
    while( ( line = reader.readLine() ) != null )
    {
        System.out.println( line );
    }

    inputStream.close();
}

因此,在执行此代码后,我得到下一个异常:

线程“main”javax中出现异常。网ssl。SSLHandshakeException:太阳。安全验证器。ValidatorException:在sun上找不到受信任的证书。安全ssl。警报。sun上的getSSLException(Alerts.java:192)。安全ssl。SSLSocketImpl。sun的致命(SSLSocketImpl.java:1917)。安全ssl。握手者。fatalSE(Handshaker.java:301)在sun。安全ssl。握手者。fatalSE(Handshaker.java:295)在sun。安全ssl。ClientHandshaker。sun上的服务器证书(ClientHandshaker.java:1471)。安全ssl。ClientHandshaker。sun上的processMessage(ClientHandshaker.java:212)。安全ssl。握手者。sun上的processLoop(Handshaker.java:936)。安全ssl。握手者。在sun处理_记录(Handshaker.java:871)。安全ssl。SSLSocketImpl。sun上的readRecord(SSLSocketImpl.java:1043)。安全ssl。SSLSocketImpl。在sun上执行HANDSHAKE(SSLSocketImpl.java:1343)。安全ssl。SSLSocketImpl。太阳上的StartAndShake(SSLSocketImpl.java:1371)。安全ssl。SSLSocketImpl。太阳上的StartAndShake(SSLSocketImpl.java:1355)。网www.protocol。https。HttpsClient。sun上的afterConnect(HttpsClient.java:563)。网www.protocol。https。AbstractDelegateHttpsURLConnection。在sun上连接(AbstractDelegateHttpsURLConnection.java:185)。网www.protocol。http。HttpURLConnection。sun上的getInputStream0(HttpURLConnection.java:1511)。网www.protocol。http。HttpURLConnection。java上的getInputStream(HttpURLConnection.java:1439)。网HttpURLConnection。sun上的getResponseCode(HttpURLConnection.java:480)。网www.protocol。https。HttpsURLConnectionImpl。httpConnection上的getResponseCode(HttpsURLConnectionImpl.java:338)。联系httpConnection上的TestSimpleHttpClient(Connection.java:179)。联系main(Connection.java:22)位于sun。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:62)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。朗。反思。方法在com上调用(Method.java:483)。intellij。rt.执行。应用阿普曼。main(AppMain.java:120)由:sun引起。安全验证器。ValidatorException:在sun上找不到受信任的证书。安全验证器。简易避震器。在sun上构建TrustedChain(SimpleValidator.java:384)。安全验证器。简易避震器。太阳上的engineValidate(SimpleValidator.java:133)。安全验证器。验证器。在sun上验证(Validator.java:260)。安全ssl。X509TrustManagerImpl。在sun上验证(X509TrustManagerImpl.java:324)。安全ssl。X509TrustManagerImpl。在sun上检查Trusted(X509TrustManagerImpl.java:229)。安全ssl。X509TrustManagerImpl。sun上的checkServerTrusted(X509TrustManagerImpl.java:124)。安全ssl。ClientHandshaker。服务器证书(ClientHandshaker.java:1453)。。。20多

伙计们,请给我解释一下如何解决这个问题。


共有1个答案

养枫涟
2023-03-14

将服务器证书作为受信任证书导入

keytool-import-trustcacerts-alias somealias-keystore-clienttrust。jks-文件marta。cer

 类似资料:
  • 下面是我的代码: 这里有个例外: 对象“users”中字段“salary”上的字段错误:拒绝值[null];代码[NotNull.Users.Salary,NotNull.Salary,NotNull.java.lang.Integer,NotNull];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码

  • 我正在测试带注释的javax验证。它们在应用程序中工作良好,方法参数上有注释。但是当我试图通过手动构建验证工厂来测试它们时 我得到以下错误。 javax。验证。ValidationException:HV000183:无法初始化“javax”。艾尔。“表达工厂”。检查类路径上是否有EL依赖项,或者改用ParameterMessageInterpolator 收到这个错误后,我在gradle文件中添

  • 我正在测试一个具有预期异常的方法。我还需要验证在抛出异常后是否调用了一些清理代码(在模拟对象上),但看起来该验证被忽略了。这是代码。我正在使用 Junit 来验证预期的异常。 似乎完全被忽略了。无论我在中使用什么方法,我的测试都通过了,这不是我想要的。 你知道为什么会发生这种情况吗?

  • 最近我正在学习Spring框架。所以我正在尝试检查依赖注入在Spring框架中的工作原理。因此,我创建了一个新的java项目并使用基于构造函数XML的配置练习依赖注入代码。运行我的项目后,我收到了这个错误...... 类路径资源[com/mir00r/beans.XML]的XML文档中的第24行无效;嵌套异常为组织。xml。萨克斯。SAXParseException;行号:24;列数:9;cvc复

  • 我正在学习selenium并尝试运行以下代码,但它引发了异常。NoSuchFieldError:空字节数组。请帮助我理解这个简单的程序出了什么问题。 控制台: 异常线程"main"java.lang.NoSuchFieldError:EMPTY_BYTE_ARRAY

  • 问题内容: 我正在用Cucumber开发我的Selenium-JVM框架,并且在运行我的第一个功能时出现错误。 请帮忙。 我如何启动功能- 右键单击功能文件 选择运行方式->黄瓜功能 立即例外- 我在代码中拥有的- Launcher.java- 功能文件- 依赖项列表已添加到列表- 我的JVM-1.7 项目中只有这么多。 请帮忙。 问题答案: 确保为Maven项目添加以下依赖项: 您可以将版本替换