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

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

Вот моя конфигурация 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. Подробнее о прохождении информации о сертификате Вот.