配置Apache将SSL客户端证书发送到后端服务器

13

我想配置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的错误日志文件中出现了以下错误:

[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

有什么想法吗?

2个回答

13
客户端证书用于SSL连接来验证用户的身份。 验证是通过公钥加密进行的,例如客户端使用其私钥对某些内容进行签名,签名可以使用公钥进行验证。 因为私钥仅由客户端知道,而公钥由所有人知道(包含在证书中),因此只有客户端可以进行签名,但每个人都可以验证签名,因此已证明签名文本来自客户端。
如果您将apache用作代理请求客户端证书,则会收到包含客户端公钥的证书,并且可以验证客户端的签名。 但是它无法访问客户端的私钥,因此无法使用客户端的原始证书创建另一个https连接。 它所能做的就是验证客户端的证书,然后将重要信息作为HTTP头转发到上游服务器。
看起来您正在尝试将客户端证书的信息放入HTTP标头中,但您的上游服务器需要更多信息,例如它需要您无法提供的客户端证书(错误消息:“..下游服务器需要客户端证书..”)。 因此,您需要更改上游服务器,以便它接受不带客户端证书的连接,并从代理中插入的HTTP标头中读取授权信息。

11
小附加说明:如果你有代理的客户端证书,你可以使用设置SSLProxyMachineCertificateFile mycertificate.pem来指定它。代理请求现在将包含该证书。这可能并没有回答原来的问题,但它可以帮助类似的情况。 - nyi

0

ProxyPass指令中使用http:而不是https:。Apache将在头部传递客户端证书。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接