2016-08-16 4 views
0

Я пытаюсь написать код, который позволит мне подключиться к серверу с использованием SSL-соединения с сертификатом. У меня есть сертификат, его файл .crt. я собрал код, но он не работает:Подключение SSL с использованием сертификата

public class SSLClient { 
public static void main(String[] args) throws Exception{ 
    String strServerName = "Some Server"; // SSL Server Name 
    int intSSLport = 443; // Port where the SSL Server is listening 
    PrintWriter out = null; 
    BufferedReader in = null; 

    { 
     // Registering the JSSE provider 
     Security.addProvider(new Provider()); 
    } 

    try { 
     // Creating Client Sockets 
     SSLSocketFactory sslfac = (SSLSocketFactory)SSLSocketFactory.getDefault(); 
     SSLSocket socket = (SSLSocket)sslfac.createSocket(strServerName,intSSLport); 

     System.setProperty("javax.net.ssl.keyStore", "D:/projects/TemporaryTesting/certificate.crt"); 

     // Initializing the streams for Communication with the Server 
     out = new PrintWriter(socket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
     String userInput = "Hello Testing "; 
     out.println(userInput); 
     System.out.println("echo: " + in.readLine()); 

     // Closing the Streams and the Socket 
     out.close(); 
     in.close(); 
     stdIn.close(); 
     socket.close(); 
    } 

    catch(Exception exp) 
    { 
     System.out.println(" Exception occurred .... " +exp); 
     exp.printStackTrace(); 
    } 

}} 

Это ошибка, я получаю:

javax.net.ssl.SSLException: Connection has been shutdown: 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 targetjavax.net.ssl.SSLException: Connection has been shutdown: 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 

Что я делаю неправильно? Должен ли я регистрировать сертификат каким-то образом с помощью java, прежде чем я смогу его использовать? Как это исправить? Это моя первая встреча с SSL-соединениями, поэтому любая помощь будет оценена.

+0

Я думаю, что вы забыли добавить сертификат своего сервера ('strServerName') в свое доверие –

+3

[проверить это] (http: // stackoverf low.com/questions/6908948/java-sun-security-provider-certpath-suncertpathbuilderexception-unable-to-find) –

+0

@ oliv37 Что такое доверенное лицо? Как добавить сертификат к нему? –

ответ

0

Я помню, делать несколько вещей, как установка Keytool в упадке, импорт сертификатов в затмении

Кроме импорта вручную в ЦМД в файл cacerts в папке JDK под Lib/безопасность http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html

Наконец добавить этот параметр в run config для моего проекта maven -Djavax.net.debug=all в eclipse для отладки

+0

После установки ключевого инструмента в затмение и импорта сертификата мне все еще нужно ввести команду в cmd? Не подскажете ли вы, чтобы сделать этот процесс для вас? Где я могу ввести '-Djavax.net.debug = all' в eclipse? –

+0

Вам повезло, у меня была такая же проблема минутой назад, когда я обновился до jdk8, keytool -import -alias someUrl.com -keystore «C: \ Program Files \ Java \ jdk1.8.0_102 \ jre \ lib \ security \ cacerts "-file" C: \ Users \ yourUsername \ Desktop \ certificate.crt "сделал исправление для меня, но у меня уже был keytool и т. д., что мы говорим в чате – kaya

+0

Есть ли здесь чат? Как мы включаем его? –

Смежные вопросы