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が証明書を要求したときに証明書を転送しないのはなぜですか?
合理的な支援をいただければ幸いです。
お時間をいただきありがとうございます。
ApacheはバックエンドTomcatサーバーへの接続用に新しいSSLセッションを生成しているため、クライアント証明書データは渡されません。証明書のあるシステムはもうクライアントではありません。
ApacheとTomcatデバイス間の暗号化されていない接続に問題がない場合は、SSLの代わりにAJPプロキシ接続(ProxyPass / ajp://x.x.x.x:8009/
)を使用し、ApacheにSSLOptions +ExportCertData
ディレクティブを追加すると、証明書データが渡されます。 Tomcatに。証明書情報の受け渡しに関する詳細情報 ここ 。