Я запускаю установку 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 "host.example.com")"/>
Можете ли вы предложить способ сделать эту работу с помощью Tomcat / APR / OpenSSL?
Приведенный выше отрывок взят из файла sever.xml, верно? У меня вопрос, почему вы не используете хранилище ключей cacerts в той JVM / JDK, которую вы используете? Вы используете это, чтобы предоставить https-доступ вашему приложению, работающему на Tomcat, верно?
Я удивлен, что сертификаты формата PEM работали в TOMCAT. Мне всегда приходилось конвертировать сертификаты PEM в формат DER, а затем использовать его в TOMCAT.
Я бы посоветовал:
ИЛИ
openssl x509 -inform PEM -in CACERT.PEM -outform DER -out CACERT.DER
используйте keytool для импорта сертификата в хранилище ключей.
отредактируйте server.xml и так, как вы идете.