web-dev-qa-db-ja.com

Apacheがmod_proxy経由でクライアントx509証明書をTomcatに転送しない

Mod_proxyを使用してApacheからTomcatにクライアントx509証明書を転送するのに問題があります。

観察といくつかのログの読み取りから、クライアントx509証明書がApacheによって受け入れられているように見えます。ただし、ApacheがTomcat(clientAuth = "want"を持つ)にSSL要求を行う場合、SSLハンドシェイク中にクライアントx509証明書が渡されたようには見えません。

Tomcatとのハンドシェイク中にApacheがクライアントx509証明書で何をしているかを確認する合理的な方法はありますか?

私が使用している環境は次のとおりです。Apache/ 2.2.3Tomcat/6.0.29 Java/6.0_23 OpenSSL 0.9.8e

これが私のApacheVirtualHostSSL構成です。

<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>

次に、TomcatSSLコネクタを示します。

 <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再ネゴシエーションに問題がある可能性はありますか?

Tomcatインスタンスのトラストストアに問題がありますか? (パートナー組織のCAを持つ非標準のトラストストアを使用しています。)

Apache for SSLで内部的に何が起こっているかについてより良いロギングがありますか?クライアント証明書に何が起こっているのか、tomcatsが証明書を要求したときに証明書を転送しないのはなぜですか?

合理的な支援をいただければ幸いです。

お時間をいただきありがとうございます。

4
hooknc

ApacheはバックエンドTomcatサーバーへの接続用に新しいSSLセッションを生成しているため、クライアント証明書データは渡されません。証明書のあるシステムはもうクライアントではありません。

ApacheとTomcatデバイス間の暗号化されていない接続に問題がない場合は、SSLの代わりにAJPプロキシ接続(ProxyPass / ajp://x.x.x.x:8009/)を使用し、ApacheにSSLOptions +ExportCertDataディレクティブを追加すると、証明書データが渡されます。 Tomcatに。証明書情報の受け渡しに関する詳細情報 ここ

5
Shane Madden