Apache не перенаправляет сертификат клиента x509 в Tomcat через mod_proxy
У меня возникают трудности при получении сертификата клиента 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
Вот моя конфигурация Apache VirtualHost SSL:
<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 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? (Мы используем нестандартное хранилище доверенных сертификатов с центрами сертификации партнерской организации.)
Есть ли лучшая регистрация для того, что происходит внутри с Apache для SSL? Например, что происходит с сертификатом клиента или почему он не пересылает сертификат, когда tomcats запрашивает его?
Любая разумная помощь будет принята с благодарностью.
Спасибо за ваше время.
1 ответ
Apache генерирует новый сеанс SSL для соединения с внутренним сервером Tomcat, поэтому данные сертификата клиента не передаются; система с сертификатом больше не является клиентом.
Если у вас все в порядке с незашифрованным соединением между Apache и устройством Tomcat, используйте прокси-соединение AJP (ProxyPass / ajp://x.x.x.x:8009/
) вместо SSL и добавление SSLOptions +ExportCertData
директива в Apache, должна передавать данные сертификата Tomcat. Там больше информации о передаче информации о сертификате здесь.