настроить SSL соединение с JSSE (Javase6) и самозаверяющим сертификатом - PullRequest
0 голосов
/ 08 июля 2010

Я пытаюсь создать простую систему клиент / сервер, которая использует SSLSocket для обмена данными. (JavaSE 6) Сервер должен иметь свой собственный сертификат, клиенты не нуждаются в нем.

Я начал с этого http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore Сгенерировать ключ для сервера и самозаверяющий сертификат. Подводя итог:

    Create a new keystore and self-signed certificate with corresponding public/private keys. 
keytool -genkeypair -alias mytest -keyalg RSA -validity 7 -keystore /scratch/stores/server.jks

    Export and examine the self-signed certificate.
keytool -export -alias mytest -keystore /scratch/stores/server.jks -rfc -file server.cer

    Import the certificate into a new truststore.
keytool -import -alias mytest -file server.cer -keystore /scratch/stores/client.jks

Тогда в моем коде сервера я делаю

System.setProperty("javax.net.ssl.keyStore", "/scratch/stores/server.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");

SSLServerSocketFactory sf = sslContext.getServerSocketFactory();
SSLServerSocket sslServerSocket = (SSLServerSocket)sf.createServerSocket( port );

Socket s = sslServerSocket.accept();

Я в основном упускаю некоторые моменты, потому что получаю «javax.net.ssl.SSLException: ни один из доступных сертификатов или ключей не соответствует включенным комплектам шифров SSL». когда я пытаюсь запустить сервер.

Может ли быть проблема с сертификатом? При использовании -validity в keytool сертификат становится самоподписанным, поэтому он должен работать, если я не ошибаюсь.

При чтении документов кажется, что установки свойства "javax.net.ssl.keyStore" достаточно для правильной настройки SSLContext. Любое предложение?

1 Ответ

1 голос
/ 09 июля 2010

Я все испортил, полное решение здесь: https://forums.oracle.com/forums/thread.jspa?threadID=1531716

...