Apache:使用 SSL 连接到代理服务器时检查了错误的主机名

Apache:使用 SSL 连接到代理服务器时检查了错误的主机名

我正在尝试使该设置正常工作:

  • 反向代理:启用 SSL 并使用 Let's Encrypt 证书(reverse-proxy.com)面向互联网。
  • 目标:使用内部证书链 (target.internal) 通过启用 SSL 的反向代理访问的站点。

因此连接应该是:

  • 客户端与反向代理的 TLS 握手
  • 反向代理到目标 TLS 握手 [失败]

我做了什么好事:

  • 将我的根 CA 证书添加到代理服务器
  • 将证书、密钥和链添加到目标
  • openssl s_client -connect target.internal:443 -prexit -CAfile /var/certs/root-ca.crt从反向代理尝试成功

但是 Apache 失败了,因为当尝试连接到“target.internal”时,它想在目标证书中查找主机名“reverse-proxy.com”,而目标证书是为“target.internal”制作的。

我的日志中有这个错误:

Cert does not match for name 'reverse-proxy.com'

成功从“root-ca.crt”遍历证书链到“target.internal.crt”后,它会打印此内容。

我不明白为什么 Apache 不寻找为“target.internal”制作的证书。

有人有想法吗?谢谢。

编辑 :

Listen 0.0.0.0:443 https

SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog

SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300

SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin

SSLCryptoDevice builtin

<VirtualHost _default_:443>

        ErrorLog logs/ssl_error_log
        TransferLog logs/ssl_access_log
        LogLevel trace1

        SSLEngine on
        SSLProxyEngine on
        SSLProxyCACertificateFile /var/certs/root-ca.crt

        SSLProtocol -all +TLSv1.2 
        SSLCipherSuite HIGH:!SSLv3:!kRSA:!kECDH:!ADH:!DSS

        SSLCertificateFile /etc/letsencrypt/live/reverse-proxy.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/reverse-proxy.com/privkey.pem

        <Files ~ "\.(cgi|shtml|phtml|php3?)$">
            SSLOptions +StdEnvVars
        </Files>
        <Directory "/var/www/cgi-bin">
            SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \                                                                                                                       
         downgrade-1.0 force-response-1.0                                                                                                                         

        CustomLog logs/ssl_request_log \                                                                                                                          
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"                                                                                                       

        ServerName reverse-proxy.com                                                                                                                              
        SSLCertificateChainFile /etc/letsencrypt/live/reverse-proxy.com/chain.pem                                                                                                                                                                                              

        ProxyPreserveHost On                                                                                                                                                                                                                                                   
        RewriteEngine On                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

        RewriteRule         ^/stuff/(.*)$     https://target.internal/$1 [P]                                                                                                                                                                                                     
        ProxyPassReverse    /stuff/           https://target.internal/                                                                                                                                                                                                           

</VirtualHost> 

相关内容