我正在开发一个需要对源服务器进行受控访问的系统。由于使用方案,证书和客户端证书身份验证是验证客户端的最佳方式。
由于多种原因,无法为每个客户提供自己的证书。相反,他们通过与反向代理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证书。
我的问题是:
我希望使用自己的证书颁发机构对证书进行自签名。
我当前的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。