2015-05-21 1 views
0

Я новичок в сокетах SSl-сервера. Все, что мне нужно сделать, это прочитать данные через SSL. Мое приложение прослушивает порт 8000. Пожалуйста, дайте мне несколько шагов, как я могу это сделать. Когда у меня есть сертификат (на моем диске), как я могу установить сокет сервера SSL и читать с клиента?Соединитель SSL-сервера и рукопожатие с известным сертификатом

Вот мои шаги

1) чтение server.crt из файла и создания X509Certificate (имеет открытый сертификат и закрытый ключ) 2) Получение экземпляра JKS хранилища ключей

3) Получить экземпляр контекста

4) создать сокет сервера на порт (8000)

InputStream in = new DataInputStream(new FileInputStream(new File("server.crt"))); 
KeyStore ks = KeyStore.getInstance("JKS"); 
ks.load(null, null); 

CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
X509Certificate cert = (X509Certificate) cf.generateCertificate(in); 
in.close(); 

ks.setCertificateEntry("dts", cert); 

char[] newpass = "password".toCharArray(); 
String name = "mykeystore.ks"; 
FileOutputStream output = new FileOutputStream(name); 
ks.store(output, newpass); 

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
kmf.init(ks, "password".toCharArray()); 




try{ 

    System.setProperty("javax.net.ssl.keyStore","mykeystore.ks"); 
    System.setProperty("javax.net.ssl.keyStorePassword","password"); 
    System.setProperty("javax.net.debug","all"); 



    SSLContext context = SSLContext.getInstance("TLSv1.2"); 
    context.init(kmf.getKeyManagers(), null, null); 
    SSLServerSocketFactory sslServerSocketfactory = context.getServerSocketFactory(); 
    SSLServerSocket sslServerSocket = (SSLServerSocket)sslServerSocketfactory.createServerSocket(8000); 
    SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept(); 


    InputStream dataIN = sslSocket.getInputStream(); 

    byte[] hello = new byte[20]; 

    dataIN.read(hello); 
    System.out.println(new String(hello)); 

    dataIN.close(); 

} catch (IOException e){ 
    e.printStackTrace(); 
} 
+0

Я получил это, когда отлаживаю «Invalidated: [Session-1, SSL_NULL_WITH_NULL_NULL]» – sunny

ответ

0

я получил ответ на мой вопрос, я сделал исследование того, как настроить собственное хранилище ключей с самоподписанным сертификатом. Это помогло мне.

ping me для получения подробных решений.