我正在开发一个需要对源服务器进行受控访问的系统 . 由于使用方案,证书和客户端证书身份验证是验证客户端的最佳方式 .

由于多种原因,无法为每个客户提供自己的证书 . 相反,他们通过与反向代理1在同一本地网络上进行访问 . 例如:

Client(s) -- [http] --> Reverse Proxy 1 (RP1) [Apache] -- [https, internet] --> Reverse Proxy 2 (RP2) [Apache] -- [http] --> Content Origin Server

这里,RP1位于客户端网络上 . 它将所有请求传递到Origin网络上的RP2 .

只允许从RP2使用与源服务器的连接,RP2使用SSL证书对自己的连接进行身份验证 . 我有这个链在整个HTTP中使用,但是一旦启用SSL我就无法连接 . 我认为这是由于我设置的Apache和各种SSL证书 .

我的问题是:

  • 此类型的'double'反向代理需要哪些SSL设置/代理设置才能与Apache一起使用(即在RP1和RP2上)?

  • 需要生成哪些SSL证书以及应在每台服务器上放置哪些证书(本例中为RP1 / RP2)?

我希望使用自己的证书颁发机构自行签署证书 .

我当前的Apache设置如下(我将限制监听端口的数量等...一旦我有一个工作系统):

RP1:

<VirtualHost *:*>
    #ProxyPreserveHost On
    SSLEngine On
    SSLProxyEngine on
    SSLProxyCACertificateFile /etc/apache2/ca.pem
    SSLProxyMachineCertificateFile /etc/apache2/proxy-client.pem

#   RequestHeader set SSL_CLIENT_CERT ""
    <Location />
#           RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}s"
            ProxyPass https://x.x.x.x:yyyy/
            ProxyPassReverse https://x.x.x.x:yyyy/
    </Location>
</VirtualHost>

RP2(x.x.x.x):

Listen yyyy https
<VirtualHost *:*>

SSLEngine On

# Set the path to SSL certificate
# Usage: SSLCertificateFile /path/to/cert.pem
SSLCertificateFile /etc/apache2/server.cer
SSLCertificateKeyFile /etc/apache2/server.key
SSLVerifyClient require
SSLVerifyDepth 2
SSLCACertificateFile /etc/apache2/ssl/ca.cer


# Servers to proxy the connection, or;
# List of application servers:

ProxyPass / http://a.a.a.a:zzzz/
ProxyPassReverse / http://a.a.a.a:zzzz/

# Or, balance the load:
# ProxyPass / balancer://balancer_cluster_name

</VirtualHost>

证书的名称是唯一的 . 所以在这种情况下,RP1上的ca.pem是来自RP2上的ca.cer的.pem .