2017-02-23 110 views
0

Я пишу простую java-программу для вызова веб-службы RESTful, и мне был предоставлен файл .cer для аутентификации SSL.Использование файла сертификата для аутентификации SSL в Java

Я не уверен, как использовать файл .cer в Java для подтверждения SSL, из-за которого я получаю SSL Handshake error при попытке вызвать веб-службу.

Не могли бы вы направить меня здесь. Спасибо заранее.

ответ

-1

Вы можете отключить квитирование. Вот тестовый код:

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()); 
     } 
    } 
+0

Этот небезопасный код не отключает квитирование TLS. Он отключает проверку сертификата, полученного во время установления связи. Не отвечает на вопрос и небезопасен в использовании. – EJP

+0

mine - это оживленный клиент для отдыха, приведенный выше код не будет работать. –

0

I have been provided with a .cer file for SSL authentication.

Это не достаточно.

У вас должен быть закрытый ключ, и вы должны были создать его самостоятельно, а не давать его, и вы должны были создать либо самозаверяющий сертификат из него, либо запрос на подпись сертификата (CSR), и иметь CSR подписанный центром сертификации (CA).

Чтобы использовать эту функцию, чтобы идентифицировать себя в Java, как закрытый ключ и сертификат должны быть в хранилище под тем же псевдонимом, и вам необходимо обеспечить доступ к хранилищу ключей и его пароль с помощью системных свойств javax.net.ssl.keyStore и javax.net.ssl.keyStorePassword, или иначе с помощью более сложного метода кода, который вы найдете задокументированным в Справочном руководстве JSSE.

+0

Да, я использовал приведенную ниже команду для генерации JKS из .cer-файла: «keytool -importcert -file» exxon-devca-client.cer »-keystore exxon-devca-client.jks -alias« exxon-devca-client »« Также добавлено ниже строк к моему jeresy клиентскому коду клиента: File resourcesDirectory = new File (System.getProperty ("user.dir") + "/resources/exxon-devca-client.jks"); \t \t System.setProperty ("javax.net.ssl.keyStore", resourcesDirectory.getAbsolutePath()); \t \t System.setProperty ("javax.net.ssl.keyStorePassword", "password"); Но теперь я становлюсь ниже ошибки: javax.net.ssl.SSLHandshakeException: Получено фатальное предупреждение: bad_certificate –

+0

Я могу только повторить. Вы должны иметь * начальный * с закрытым ключом, и для этого вам нужно начать с файла JKS. Нет необходимости генерировать новый файл JKS из файла .cer. Вы должны импортировать его в одно хранилище ключей, из которого вы создали CSR, используя тот же псевдоним. NB Пожалуйста, не отправляйте компьютерные команды или вывод или код в комментариях. Вы сами видите, что это совершенно неразборчиво. – EJP