Мы хотим реализовать mtls в tomcat (в роли сервера), и он должен проверять клиентский сертификат leaf.
В настоящее время соединение устанавливается просто с добавлением корневого и промежуточного сертификатов в trust store. Он не заботится о проверке сертификата leaf.
Ответ
Для реализации mTLS (Mutual TLS) в Tomcat, который будет проверять не только корневой и промежуточный сертификаты, но и сертификаты клиентских leaf, необходимо выполнить следующие шаги:
Шаг 1: Создание сертификатов
Вы должны создать собственный центр сертификации (CA) и использовать его для подписания клиентских сертификатов. Вы можете использовать такие инструменты, как OpenSSL, для создания и подписи сертификатов.
-
Создайте CA:
openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt
- Создайте клиентский сертификат:
openssl genrsa -out client.key 2048 openssl req -new -key client.key -out client.csr openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 500 -sha256
Шаг 2: Создание хранилищ для сертификатов
Создайте хранилища для хранения сертификатов сервера и клиентских сертификатов.
-
Создайте хранилище keystore (для сервера):
keytool -importkeystore -srckeystore server.keystore -destkeystore server.keystore -deststoretype PKCS12
-
Импортируйте серверный сертификат:
keytool -import -alias tomcat -file server.crt -keystore server.keystore
-
Создайте truststore (для доверенных сертификатов):
keytool -import -alias ca -file ca.crt -keystore truststore.jks
Убедитесь, что клиентский сертификат (client.crt) доверяется в truststore.
Шаг 3: Настройка Tomcat
Теперь, когда у вас есть необходимые сертификаты и хранилища, вы можете настроить Tomcat для использования mTLS:
-
Откройте файл
server.xml
, который находится в директорииconf
вашего Tomcat. -
Найдите раздел конфигурации для вашего соединителя (обычно это
<Connector port="8443" ...>
), и добавьте или измените следующие параметры:<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="path/to/your/server.keystore" keystorePass="your_keystore_password" truststoreFile="path/to/your/truststore.jks" truststorePass="your_truststore_password" />
Обратите внимание на параметр
clientAuth
, который должен быть установлен вtrue
, чтобы требовать клиентская аутентификация.
Шаг 4: Проверка конфигурации
После выполнения вышеперечисленных шагов перезапустите Tomcat и проверьте, работает ли mTLS как ожидалось. Вы можете использовать инструменты, такие как curl
, с указанием клиентского сертификата для проверки:
curl -v -E client.crt --key client.key https://your-server:8443
Если все настроено правильно, соединение будет установлено только при наличии действительного клиентского сертификата.
Заключение
Это полное руководство по реализации mTLS на сервере Tomcat с валидацией клиентского leaf сертификата. Убедитесь, что сертификаты правильно подписаны вашим CA, и все хранилища настроены корректно. Если возникнут проблемы с подключением, проверьте логи Tomcat для получения более подробной информации.