我想配置 Apache,以便它接收客户端证书,并将其传递到另一台服务器。
我在用着:
- Windows 上的 Apache 2.0.65
- 后端服务器是基于 apache 的解决方案 (IBM HTTP Server)
我尝试了这个配置:
<VirtualHost *:443>
ServerName apacheserver.domain.com
SSLEngine on
SSLProxyEngine on
SSLCertificateFile "e:/Apache/Apache2/conf/server.cer"
SSLCertificateKeyFile "e:/Apache/Apache2/conf/server.key"
SSLCACertificateFile "e:/Apache/Apache2/conf/certca.cer"
SSLVerifyClient require
SSLVerifyDepth 2
ProxyPreserveHost on
ProxyRequests off
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
# initialize the special headers to a blank value to avoid http header forgeries
RequestHeader set SSL_CLIENT_S_DN ""
RequestHeader set SSL_CLIENT_I_DN ""
RequestHeader set SSL_SERVER_S_DN_OU ""
RequestHeader set SSL_CLIENT_VERIFY ""
<Directory />
# add all the SSL_* you need in the internal web application
RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}e"
RequestHeader set SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}e"
RequestHeader set SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}e"
RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}e"
ProxyPass https://192.168.10.191/
ProxyPassReverse https://192.168.10.191/
</Directory>
</VirtualHost>
当我尝试这个配置时,我在 apache 的 error.log 文件中出现以下错误:
[Tue Dec 31 12:14:52 2013] [warn] Proxy client certificate callback: (apacheserver.domain.com:443) downstream server wanted client certificate but none are configured
有任何想法吗?
客户端证书用于 SSL 连接中以验证用户的身份。验证是通过公钥加密完成的,例如客户端使用其私钥签署某些内容,并且可以使用公钥验证签名。并且由于私钥只有客户端知道,而公钥所有人都知道(它包含在证书中),因此只有客户端可以签名,但每个人都可以验证签名,从而证明签名文本来自客户端。
如果您使用 apache 作为请求客户端证书的代理,它将收到包含客户端公钥的证书,并且它将能够验证客户端的签名。但它无法访问客户端私钥,因此无法使用客户端原始证书创建另一个 https 连接。它所能做的就是验证客户端证书,然后将重要信息作为 HTTP 标头转发到上游服务器。
看起来您尝试将客户端证书中的信息放入 HTTP 标头中,但您的上游服务器需要更多信息,例如它需要您无法提供的客户端证书(错误消息:“..下游服务器想要客户端证书..”)。因此,您需要更改上游服务器,以便它接受没有客户端证书的连接,并从您插入代理中的 HTTP 标头读取授权信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)