Java - создание SSL-сервера
Я не опытный с использованием SSL. Я создал очень простой клиентский сервер и могу успешно отправлять и получать файлы с сервера с помощью моего клиента. Я сгенерировал хранилище ключей с самозаверяющим сертификатом X509 через командную строку keytool и сохранил его в своем каталоге сервера.
Я немного сбит с толку, так как изначально я создал свой сервер, используя http://stilius.net/java/java_ssl.php в качестве руководства, но не смог заставить его работать, я использовал
System.setProperty("javax.net.ssl.keyStore", jksFilepath);
System.setProperty("javax.net.ssl.keyStorePassword", jkspass);
связать мое хранилище ключей с сервером. Всякий раз, когда я пытался получить файл, я получал Java SSLHandshakeException "никаких общих наборов шифров".
Однако, когда я сейчас использую код, идентичный следующему: http://www.java2s.com/Tutorial/Java/0490__Security/SSLContextandKeymanager.htm для настройки моего сервера, он работает отлично.
Кроме того, второе руководство просто использует ServerSocket, а не SSLSocket - что мне использовать? Переключение между ними, похоже, ничего не меняет, когда я запускаю сервер и получаю файл.
1 ответ
Проверьте это Java SSLHandshakeException "никаких общих наборов шифров" для возможного дубликата вашей проблемы
Во втором примере ссылка SSLContext and KeyManager
инициированы. В первом примере их нет. Если вы хотите, чтобы ваше хранилище ключей использовалось в качестве хранилища ключей, вам необходимо загрузить его и инициализировать с ним KeyManagerFactory:
Это код второго примера. SSLContext
инициируется с KeyManagers
context = SSLContext.getInstance("TLS");
kmf = KeyManagerFactory.getInstance("SunX509");
FileInputStream fin = new FileInputStream(storename);
ks = KeyStore.getInstance("JKS");
ks.load(fin, storepass);
context.init(kmf.getKeyManagers(), null, null);
В первом примере создается SSLSocketFactory по умолчанию
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocketFactory.getDefault()
Запускает SSLContext.getDefault()
который создает контекст по умолчанию (без нужных вам параметров)