Как сгенерировать и импортировать пару самозаверяющих ключей шифрования в систему JSSE по умолчанию для тестирования на JAVA

Программисты JAVA общаются здесь
Anonymous
Как сгенерировать и импортировать пару самозаверяющих ключей шифрования в систему JSSE по умолчанию для тестирования на

Сообщение Anonymous »

Я разрабатываю два приложения Java: серверное и клиентское. Они общаются через SSL благодаря JSSE.
В конечном итоге сервер будет иметь сертификат, выданный доверенным центром, и если я понимаю JSSE, это означает, что клиент должен иметь возможность подключаться без какой-либо специальной настройки.
Тем временем, во время разработки я буду запускать и сервер, и клиент на одном компьютере, и они будут подключаться к локальному хосту. Я хотел бы создать самозаверяющий сертификат в хранилище ключей Java по умолчанию и хранилище доверенных сертификатов (

Код: Выделить всё

cacerts). Кстати, я делаю это в Docker, поэтому не добавляю эти сертификаты в свою реальную систему навсегда.
Я использую следующую команду для генерации пары ключей:
keytool -genkeypair -storepass changeit -alias test -keyalg RSA -validity 365 -dname "CN=, OU=, O=, L=, ST=, C="
Этого недостаточно. Мой клиент по-прежнему не может завершить подтверждение SSL.
Я пробовал эти команды после вышеизложенного:

Код: Выделить всё

keytool -exportcert -storepass changeit -alias test -file test.cer
keytool -importcert -storepass changeit -alias test -file test.cer
Однако это вызывает ошибку:

Код: Выделить всё

keytool error: java.lang.Exception: Certificate reply and certificate in keystore are identical
Это говорит о том, что пара уже находится в cacerts без необходимости экспорта и импорта ключа; однако простое создание пары ключей не работает.
Что я делаю не так? Моя цель - иметь возможность запускать мой сервер и клиент на локальном хосте и обеспечивать их связь через SSL, используя только системные ключи и хранилища доверенных сертификатов по умолчанию.
Я знаю, что могу создать локальное хранилище ключей сервера и файл хранилища доверенных сертификатов локального клиента, а затем использовать их через аргументы JVM, такие как -Djavax.net.ssl.keyStore и -Djavax.net.ssl.keyStorePassword и т. д. Я не хочу использовать это решение по двум причинам. Во-первых, я не копирую команды, которые буду использовать при фактическом запуске клиента после завершения. Во-вторых, это делает команду запуска слишком многословной.

Вернуться в «JAVA»