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, и это просто удаляет меня, что каждая из этих разных служб не имеет одинаковых алгоритмов, когда они должны получать доступ к тем же сертификатам.
Ответы
Ответ 1
Попробуйте javax.net.ssl.keyStorePassword
вместо javax.net.ssl.keyPassword
: последнее не упоминается в справочнике JSSE.
Алгоритмы, которые вы упомянули, должны быть по умолчанию с использованием поставщиков безопасности по умолчанию. NoSuchAlgorithmException
часто вызывают другие основные исключения (файл не найден, неправильный пароль, неправильный тип хранилища ключей,...). Полезно смотреть на полную трассировку стека.
Вы также можете использовать -Djavax.net.debug=ssl
или, по крайней мере, -Djavax.net.debug=ssl,keymanager
, чтобы получить дополнительную информацию об отладке, если информация в трассировке стека недостаточна.