Назад | Перейти на главную страницу

Проверить сертификат клиента CN в Tomcat (APR)

Я запускаю установку tomcat с установленными библиотеками APR (со стеком OpenSSL HTTPS, который поставляется с ним).

Я пытаюсь заблокировать определенный соединитель HTTPS для пользователей определенного сертификата. Добавление проверки сертификата клиента не проблема, но я не могу заставить его проверять только на конкретное общее имя.

Возможно, я был немного наивен и подумал, что атрибут mod_ssl SSLRequire обычно используется в Apache Httpd, но это свойство не распознается реализацией Tomcat. (http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#SSL%20Support указывает на некоторые документы mod_ssl, но реализация Tomcat, похоже, не охватывает все аспекты mod_ssl).

Я могу заставить это работать, используя версию Java коннектора вместо APR (теряя некоторую производительность) и просто добавив хранилище доверенных сертификатов с этим единственным сертификатом в нем. Однако, используя openssl без выражений SSLRequire, я не уверен, как это сделать с Tomcat7 (в Windows, если это имеет значение).

<Connector
   protocol="HTTP/1.1"
   port="443" maxThreads="150"
   scheme="https" secure="true" SSLEnabled="true"
   SSLCertificateFile="mycert.pem"
   SSLCertificateKeyFile="privkey.pem"
   SSLCACertificateFile="CABundle.pem"
   SSLVerifyClient="require" SSLProtocol="TLSv1" SSLRequire="(%{SSL_CLIENT_S_DN_CN} eq &quot;host.example.com&quot;)"/>

Можете ли вы предложить способ сделать эту работу с помощью Tomcat / APR / OpenSSL?

Приведенный выше отрывок взят из файла sever.xml, верно? У меня вопрос, почему вы не используете хранилище ключей cacerts в той JVM / JDK, которую вы используете? Вы используете это, чтобы предоставить https-доступ вашему приложению, работающему на Tomcat, верно?

Я удивлен, что сертификаты формата PEM работали в TOMCAT. Мне всегда приходилось конвертировать сертификаты PEM в формат DER, а затем использовать его в TOMCAT.

Я бы посоветовал:

  1. Создайте сертификат в вашем хранилище ключей / ваш / путь / к / java / jre / lib / security / cacerts, используя двоичный файл keytool, который поставляется с вашей установкой java. Вам предоставляется возможность разместить свое Java-приложение на SSL.

ИЛИ

  1. если у вас уже есть CACERT.PEM, преобразуйте его в DER с помощью openssl:

openssl x509 -inform PEM -in CACERT.PEM -outform DER -out CACERT.DER

  1. используйте keytool для импорта сертификата в хранилище ключей.

  2. отредактируйте server.xml и так, как вы идете.