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

标签 apache client certificate

我想配置 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 header 转发到上游服务器。

    看起来您试图将来自客户端证书的信息放入 HTTP header 中,但是您的上游服务器需要更多,例如它需要您无法提供的客户端证书(错误消息:“..下游服务器需要客户端证书..”)。因此,您需要更改上游服务器,使其接受没有客户端证书的连接,并从您插入代理的 HTTP header 中读取授权信息。

    关于apache - 配置 Apache 将 SSL 客户端证书发送到后端服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20857376/

    相关文章:

    ios - 创建开发人员和生产证书问题?

    Java:使用现有的 pfx 证书签署 PDF

    apache - 我可以从 C 模块内部强制关闭 Apache 2.2 连接吗?

    javascript - 我可以只使用 JavaScript 制作客户端/服务器任务管理器吗?

    php - 如何在 WAMP Server 3 的虚拟主机中启用目录列表

    java - 服务器可以发送多个响应来响应客户端的请求吗?

    c# - 如何在 C# 中实现动态 OData 客户端?

    debian - 如何强制较旧的 debian 忘记 DST Root CA X3 Expiration 并使用 ISRG Root X1 - SSL 证书问题 : certificate has expired

    java - Apache Hadoop 没有做它应该做的事情,而是合并和减少我的程序中的工作

    apache - 使用 mod_auth_cas 和自定义登录单点登录