Как проверить, что самозаверяющий сертификат, импортированный в keystore.jks, работает с truststore.jks? - PullRequest
1 голос
/ 22 марта 2020

Введение

В настоящее время принято устанавливать SSL для связи между различными внутренними микро-сервисами. Для его настройки требуются различные шаги.

Мой конкретный пример состоял в том, что я пытался настроить безопасную связь для кластера Kafka, чтобы брокеры общались через SSL и чтобы клиенты также использовали SSL при связи с брокерами kafka.

Борьба

Обычно я следую некоторым шагам учебника, чтобы получить локальный пример работы. Но это может быть трудно для устранения неполадок, когда это не работает. Вы не знаете, допустили ли вы ошибку при создании root сертификата или при создании хранилища ключей и доверенных сертификатов, или, возможно, что-то не так с вашей конфигурацией.

Хорошо бы прочитать столько документации, прежде чем пытаться понять что ты делаешь. И не просто слепо следовать некоторым инструкциям. Дело в том, что изучать кучу вещей одновременно может быть очень сложно. Потому что вам нужно использовать различные вещи: openssl, keytool, Kafka (или что-то еще)

Я пытался найти, есть ли какой-либо существующий инструмент, или если keytool можно использовать напрямую, чтобы указать ему хранилище ключей, хранилище доверенных сертификатов и имя хоста, и если эти файлы «совместимы», то результатом будет ДА ​​/ НЕТ.

Я знаю, что можно использовать openssl s_client -connect my-host:my-port Но в Чтобы использовать его, сначала нужно раскрутить веб-сервер с вашим хранилищем ключей.

Вопрос

Как обеспечить, чтобы сгенерированные вами параметры keystore.jks и trustore.jks работали правильно для некоторых ваших имен хостов ? Таким образом, вы можете исключить их как проблемные c и сосредоточиться на других вещах, которые могут привести к неработоспособности вашей системы.


Обновление

В некоторых комментариях предлагаются другие подходы:

  • используйте openssl, чтобы запустить его с s_server и начать с s_client
    • профи : вероятно, более надежный, лучший выход для отладки
    • cons : если у вас есть только .jks файлы, вам нужно использовать keytool, чтобы преобразовать их в .p12
  • использовать Keystore explorer или keytool -v -list ... для проверки содержимого
    • это ручная работа, и неясно, какие значения должны совпадать, чтобы гарантировать, что связь будет фактически работать ((server с keystore.jks) и (client с truststore.jks)

1 Ответ

1 голос
/ 22 марта 2020

Я создал простую небольшую программу для проверки keystore.jks и trustore.jks. Это простая java программа, которая откроет сокет ssl, а затем запустит клиент, чтобы попытаться подключиться к этому сокету и обменяться некоторыми данными.

Вот gist Я создал его, чтобы поделиться им .

Вы можете скомпилировать его просто с помощью:

javac KeyTest.java

Запустите его с помощью:

java KeyTest \
   -k path-to-keystore.jks -kp keystore-password \
   -t path-to-truststore.jks -tp truststore-password \
   -h localhost -p 443

ПРИМЕЧАНИЯ :

  • Для -h вам необходимо указать хост (общее имя CN), который вы использовали при создании хранилища ключей (например, CN = localhost)
  • Вам необходимо запустить этот хост, потому что клиент попытается подключиться к нему альтернатива - запустить его где-нибудь еще, но затем вы можете добавить 127.0.0.1 my.example.host.com в /etc/hosts, чтобы направить разрешение DNS на эту же машину
...