总结我的问题:
我有一个面向 Jboss 的 Apache Web 服务器。下面是 Httpd conf 的 ssl 部分
ProxyRequests Off
SSLProxyEngine on
SSLCertificateFile
/FinMgmt/deploy/https/certs/webserver/fm.insurance.co.uk_a_cert.pem
SSLCertificateKeyFile
/FinMgmt/deploy/https/certs/webserver/fm.insurance.co.uk_a_key.pem
SSLCACertificateFile
/FinMgmt/deploy/https/certs/fm.insurance.co.uk_CA_cert.pem
SSLVerifyClient optional_no_ca
SSLOptions +ExportCertData
ProxyPass /webapp1 https://fm.insurance.co.uk:8443/webapp1
ProxyPassReverse /webapp1 https://fm.insurance.co.uk:8443/webapp1
ProxyPass /webapp2 https://fm.insurance.co.uk:8443/webapp2
ProxyPassReverse /webapp2 https://fm.insurance.co.uk:8443/webapp2
下面是来自 jboss server.xml 的 ssl 部分:
<!-- SSL/TLS Connector configuration using the admin devl guide keystore clientAuth=false -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="500" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="${jboss.server.home.dir}/conf/server.keystore"
keystorePass="glamdev"
truststoreFile="${jboss.server.home.dir}/conf/server.truststore"
truststorePass="passwd"/>
据我了解,Apache 配置为使用 SSLVerifyClient optional_no_ca 的 2 路相互身份验证,这意味着客户端可能提供也可能不提供证书。
现在 jboss 被配置为一种方式的 SSL 身份验证。现在我的理解是,当浏览器发送请求 apache 时,apache 将响应证书,浏览器将尝试使用其根 CA 进行身份验证或抛出异常,要求用户存储它。
当 apache 将请求路由到 jboss 时,这里 apache 将充当客户端,jboss 作为 SSL 服务器,jboss 将从密钥库发送其证书,该证书将由 Apache 使用 SSLCACertificateFile 指令进行验证
如果 jboss 必须重定向到自己,它必须通过反向代理,因为我们设置了 proxyPassReverse。在这种情况下,jboss 将充当 SSL 客户端,Apache http 作为 SSL 服务器,Apache 将发送 jboss 验证使用的证书信任库中的 CA 证书。我在解释配置文件方面是对的吗?
另外我不完全理解在 SSLVerifyClient 中使用 optional_no_ca。apache 是否会从浏览器请求证书,或者它取决于浏览器?
实际上,我继承了这个应用程序而没有任何文档,我正在努力理解它。