У меня возникают трудности с отправкой клиентского сертификата x509 на Tomcat из Apache с помощью mod_proxy.
Из наблюдений и чтения нескольких журналов кажется, что сертификат x509 клиента принимается Apache. Но когда Apache делает SSL-запрос к Tomcat (который имеет clientAuth = "want"), это не похоже на то, что клиентский сертификат x509 передается во время подтверждения ssl.
Есть ли разумный способ увидеть, что Apache делает с клиентским сертификатом x509 во время рукопожатия с Tomcat?
Вот среда, с которой я работаю: Apache / 2.2.3 Tomcat / 6.0.29 Java / 6.0_23 OpenSSL 0.9.8e
Вот моя конфигурация SSL для Apache VirtualHost:
<VirtualHost xxx.xxx.xxx.xxx:443>
ServerName xxx
ServerAlias xxx
SSLEngine On
SSLProxyEngine on
ProxyRequests Off
ProxyPreserveHost On
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel debug
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /usr/local/certificates/xxx.crt
SSLCertificateKeyFile /usr/local/certificates/xxx.key
SSLCertificateChainFile /usr/local/certificates/xxx.crt
SSLVerifyClient optional_no_ca
SSLOptions +ExportCertData
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://xxx.xxx.xxx.xxx:8443/
ProxyPassReverse / https://xxx.xxx.xxx.xxx:8443/
</VirtualHost>
Тогда вот мой Tomcat SSL Connector:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" address="xxx.xxx.xxx.xxx"
maxThreads="150" scheme="https" secure="true"
keystoreFile="/usr/local/certificates/xxx.jks" keypass="xxx_pwd"
clientAuth="want" sslProtocol="TLSv1" proxyName="xxx.xxx.xxx.xxx" proxyPort="443"
/>
Могут ли быть проблемы с повторным согласованием SSL?
Могут ли быть проблемы с Truststore в нашем экземпляре Tomcat? (Мы используем нестандартный Truststore, у которого есть центры сертификации партнерских организаций.)
Есть ли лучшая регистрация того, что происходит внутри Apache для SSL? Например, что происходит с сертификатом клиента или почему он не пересылает сертификат, когда коты его запрашивают?
Любая разумная помощь будет принята с благодарностью.
Спасибо за уделенное время.
Apache создает совершенно новый сеанс SSL для подключения к внутреннему серверу tomcat, поэтому данные сертификата клиента не передаются; система с сертификатом больше не является клиентом.
Если вас устраивает незашифрованное соединение между Apache и устройством Tomcat, используйте прокси-соединение AJP (ProxyPass / ajp://x.x.x.x:8009/
) вместо SSL и добавив SSLOptions +ExportCertData
директива в Apache, должна передавать данные сертификата в Tomcat. Подробнее о прохождении информации о сертификате Вот.