#ssl #tomcat #certificate #ssl-certificate #keytool
#ssl #tomcat #сертификат #ssl-сертификат #keytool
Вопрос:
Я пытаюсь сгенерировать свой собственный SSL-сертификат с помощью keytool для моего приложения Java servlet, работающего на Tomcat 9. Я создаю сертификат с помощью этого скрипта:
rem 1) Key-Pair Generation For Client with:
keytool -genkey -keyalg RSA -keysize 1024 -keystore C:certclient1ks.jks -storepass test1234 -alias client1 -keypass client1pass -dname "CN=testuser1, OU=tmdev, O=dev, L=ist, ST=tr, C=tr"
rem 2) Public Cer Exported for Client with: test1public.cer
keytool -keystore C:certclient1ks.jks -storepass test1234 -alias client1 -keypass client1pass -exportcert -file C:certtest1public.cer
rem 3) Add extracted Client Public Cer to trusted store of Server KeyStore:
keytool -keystore "C:certserver.jks" -storepass server1234 -import -file "C:certtest1public.cer" -alias trustedclient1
rem 4) Key-Pair Generation For Server with:
keytool -genkey -keyalg RSA -keysize 1024 -keystore C:certserver.jks -storepass server1234 -alias server1 -keypass server1pass -dname "CN=server1, OU=tmdev, O=dev, L=ist, ST=tr, C=tr"
rem 5) Server Cer Exported for Client with: test1public.cer
keytool -keystore C:certserver.jks -storepass server1234 -alias server1 -keypass server1pass -exportcert -file C:certserverpublic.cer
rem 6) Add extracted Server Public Cer to trusted store of Client KeyStore:
keytool -keystore C:certclient1ks.jks -storepass test1234 -import -file C:certserverpublic.cer -alias trustedserver
И я добавил это в server.xml в конфигурации Tomcat:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443" SSLEnabled="true"
maxThreads="200" scheme="https" secure="true"
keystoreFile="C:certclient1ks.jks" keystorePass="test1234"
clientAuth="false" sslProtocol="TLS" />
Но мой браузер по-прежнему отображается Your connection to this site is not secure
с красной блокировкой. Почему?
Комментарии:
1. Ваш браузер не доверяет самозаверяющему сертификату. Получите его, подписанный центром сертификации.
Ответ №1:
То, что вы сделали, — это шаги по настройке вашего сервера с использованием самозаверяющего сертификата. Вы еще не сообщили клиенту (браузеру) о своем сертификате сервера.
Клиенты, такие как браузеры, имеют набор центров сертификации (CA) и вспомогательных центров сертификации, которым он доверяет по умолчанию. Любой сертификат, подписанный этими CA / SubCA, будет доверенным клиентом по умолчанию, вам не нужно делать никаких дополнительных шагов, чтобы это произошло. Но когда вы работаете с самозаверяющим сертификатом или сертификатом, подписанным центром сертификации, которому клиент не доверяет, вы должны явно указать клиенту доверять центру сертификации или самозаверяющему сертификату.
Итак, чтобы ответить на ваш вопрос, поскольку вы работаете с самозаверяющим сертификатом, вам необходимо добавить этот сертификат в хранилище доверия браузера. Вы можете найти хранилище доверия браузеров в настройках браузера (обычно в разделе безопасность).
Расширенная настройка:
Вы можете самостоятельно создать цепочку сертификатов для репликации цепочки доверия, сначала создав самозаверяющий сертификат CA, а затем создав пару ключей сервера и создав CSR для этой пары ключей, и попросите CA подписать CSR для выдачи сертификата. Затем вы должны связать этот сертификат с вашей парой ключей сервера. В этом случае вам нужно добавить только самозаверяющий сертификат центра сертификации в хранилище доверия браузера. Вы бы не добавили сертификат сервера. Это идеальный способ сделать это. Вы могли бы легко выполнить все эти шаги с помощью приложения keystore-explorer, у него приятный и простой графический интерфейс. Если вы используете этот подход, завтра, если у вас есть второй сервер, который вам нужно защитить, все, что вам нужно сделать, это сгенерировать пару ключей для второго сервера и выполнить те же действия, что и выше (за исключением добавления сертификата CA в хранилище доверия). Теперь вы сможете запустить свое второе приложение без каких-либо проблем в браузере (вы не увидите красную блокировку).
Примечание по безопасности:
Вы бы сделали это только на этапе разработки. Для рабочей версии вашего приложения вы должны настроить свой сервер с реальным сертификатом, подписанным известным центром сертификации.
Комментарии:
1. Спасибо за этот ответ, он был очень полезен. Keystore-explorer намного лучше, я создал там свой собственный файл .jks следующим образом: i.imgur.com/tP6pKNB.png , экспортировал цепочку сертификатов с локального хоста и добавил этот файл .cer в доверенный центр сертификации в моем браузере и.. у меня все еще красная блокировка..
2. @rafalrozek вы должны добавлять сертификат центра сертификации в хранилище доверия браузера, а не конечного объекта (сервер).
3. Значит, мой файл localhost.jks неисправен? Я пытался добавить много сертификатов в доверенное хранилище broweser, но ни один из них не работает. Мой файл actuall .jks: i.imgur.com/PSrb4iy.png и я попытался добавить localhost.cer
4. @rafalrozek какое сообщение вы видите в браузере, когда нажимаете на красную блокировку?
5. Хорошо, похоже, вы почти на месте. Теперь вам нужно правильно настроить сертификат сервера. Вам нужно выяснить, почему chrome жалуется. Если вы увидите вкладку «Безопасность» в инструментах разработчика, она сообщит вам, что не так с сертификатом. Я подозреваю, что это может быть из-за общего имени (CN) сертификата, похоже, у вас есть
myLocal
. Предполагается, что это имя сервера (localhost). Если у вас другой CN, то в вашем сертификате должно быть расширение ‘subjectAltName’. Вам нужноDNS
илиIP
под SAN, вы можете добавить эти расширения в CSR и заставить CA соблюдать его.