Подтвердить что ты не робот

Java и SSL - java.security.NoSuchAlgorithmException

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

keytool -genkey -alias localhost -keyalg RSA -keypass kpass123 -storepass kpass123 -keystore keystore.jks

Вот соответствующий код:

System.setProperty("javax.net.ssl.keyStore",
                   "G:/Data/Android_Project/keystore.jks");

System.setProperty("javax.net.ssl.keyPassword", "kpass123");

SSLServerSocketFactory factory = 
    (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();

SSLServerSocket accessSocket = 
    (SSLServerSocket)factory.createServerSocket(DB_ACCESS_PORT);

Когда я пытаюсь запустить это, я поймаю это:

java.security.NoSuchAlgorithmException: ошибка при построении реализации (алгоритм: по умолчанию, поставщик: SunJSSE, класс: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)

Я также обнаружил, что служба "KeyPairGenerator" имеет для нее доступные алгоритмы DIFFIEHELLMAN, DSA, RSA, тогда как "SSLContext" имеет алгоритмы SSL, TLS, SSLV3, DEFAULT, TLSV1.

Нужно ли мне найти способ установки RSA в службу SSLContext? Я даже смотрю на правильные услуги? Должен ли я использовать RSA?

Я новичок во всей документации SSL - Security - Certificates, и это просто удаляет меня, что каждая из этих разных служб не имеет одинаковых алгоритмов, когда они должны получать доступ к тем же сертификатам.

4b9b3361

Ответ 1

Попробуйте javax.net.ssl.keyStorePassword вместо javax.net.ssl.keyPassword: последнее не упоминается в справочнике JSSE.

Алгоритмы, которые вы упомянули, должны быть по умолчанию с использованием поставщиков безопасности по умолчанию. NoSuchAlgorithmException часто вызывают другие основные исключения (файл не найден, неправильный пароль, неправильный тип хранилища ключей,...). Полезно смотреть на полную трассировку стека.

Вы также можете использовать -Djavax.net.debug=ssl или, по крайней мере, -Djavax.net.debug=ssl,keymanager, чтобы получить дополнительную информацию об отладке, если информация в трассировке стека недостаточна.