在Java中使用CERT文件进行SSL身份验证



我正在编写一个简单的Java程序来调用RESTFUL Web服务,并为我提供了一个用于SSL身份验证的.cer文件。

我不确定如何在Java中使用.cer文件进行SSL握手,因此,当我尝试调用Web服务时,我会得到SSL Handshake error

您能在这里引导我吗?预先感谢。

我已经为SSL身份验证提供了.cer文件。

这还不够。

您应该有一个私钥,您应该自己创建它,而不是给予它,并且您应该从中生成自签名的证书,否则将证书签名请求(CSR)(CSR)并签署了CSR由证书机构(CA)。

要使用它在Java中对自己进行身份验证,私钥和证书都需要在相同的别名下放在密钥库中,并且您需要通过系统属性javax.net.ssl.keyStorejavax.net.ssl.keyStorePassword提供密钥库及其密码,否则通过更复杂的代码方法,您将在JSSE参考指南中找到记录的代码方法。

您可以禁用握手。这是测试代码:

    private static void sslTest(String serviceUrl, String username, String password) throws Exception {
       System.setProperty("jsse.enableSNIExtension", "false");
       CredentialsProvider provider = new BasicCredentialsProvider();
       provider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
       SSLContext sslContext = SSLContexts.custom()
               .loadTrustMaterial(null, new TrustStrategy() {
                   @Override
                   public boolean isTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
                       return true;
                   }
               })
               .useTLS()
               .build();
       SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
       CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).setSSLSocketFactory(sslsf).build();
       String content = "";

       try {
           HttpResponse response = client.execute(new HttpGet(serviceUrl));
           if (Integer.toString(response.getStatusLine().getStatusCode()).equalsIgnoreCase("200")) {
               HttpEntity entity = response.getEntity();
               content = EntityUtils.toString(entity);
               System.out.println(content);
           }
       } catch (Exception e) {
           logger.error("Exception : {}", e.getMessage());
       }
   }

相关内容

  • 没有找到相关文章

最新更新