使用双向 SSL 设置 Apache 正向代理且证书 CN 检查失败

使用双向 SSL 设置 Apache 正向代理且证书 CN 检查失败

我需要设置一个具有双向 SSL 验证的正向代理。我在 Debian 上使用 Apache 2.4.10 取得了很大进展,但由于证书 CN 与错误的名称进行了比较,因此失败了。我搜索并阅读了每个提到类似内容的页面,但我找不到解决方案。

设置:

我已经在 Apache 2.4.10 中为每个 tomcat vhost 设置了一个虚拟主机,配置如下:

<虚拟主机 *:80>
  服务器名称 domain1.example.com

   SSLProxyEngine 开启
   ProxyVia 开启

   SSLProxyMachineCertificate文件 /proxysetup/certs/domain1.example.certandkey.pem

   # 服务器证书验证

   SSLProxyCACertificatePath /proxysetup/ca
   SSLProxyCARevocation检查叶
   SSLProxyCARevocationPath /proxysetup/crl
   SSLProxyVerify 要求
   SSLProxyVerifyDepth 4
   SSLProxyCheckPeerName 关闭
   SSLProxyCheckPeerCN 开启
   SSLProxyCheckPeerExpire 已打开

  ProxyPass /外部 https://externalserver.com/
  ProxyPassReverse /外部 https://externalserver.com/

    <代理“*”>
        命令拒绝、允许
        允许所有人
    </代理>

   日志级别调试

   错误日志 /proxysetup/logs/domain1.example-error-80.log
   CustomLog /proxysetup/logs/domain1.example-access-80.log 合并

</虚拟主机>

当我发起请求时(http://domain1.example.com/external/someuri)我看到 SSL 握手正在进行,但失败并出现以下错误

SSL Proxy: Peer certificate CN mismatch: Certificate CN: EXTERNALSERVER.COM Requested hostname: domain1.example.com

然后连接就关闭了。

在执行此检查之前,添加ProxyPerserveHost off握手就会停止。

需要做什么才能成功验证证书?

更新

我设法通过将配置更改为以下内容来实现它:

<虚拟主机 *:80>
  服务器名称 domain1.example.com

   SSLProxyEngine 开启

   SSLProxyMachineCertificate文件 /proxysetup/certs/domain1.example.certandkey.pem

   # 服务器证书验证

   SSLProxyCACertificatePath /proxysetup/ca
   SSLProxyCARevocation检查叶
   SSLProxyCARevocationPath /proxysetup/crl
   SSLProxyVerify 要求
   SSLProxyVerifyDepth 4
   SSLProxyCheckPeerName 关闭
   SSLProxyCheckPeerCN 关闭
   SSLProxyCheckPeerExpire 已打开

  ProxyPass /external/ https://externalserver.com/
  ProxyPassReverse /external/ https://externalserver.com/

  代理密码 / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/

    <代理“*”>
        要求所有已授予
    </代理>

  <代理“* / external /”>
  # 仅允许本地请求
  # 并且仅当服务器证书包含正确的 FQDN

  要求全部拒绝
  需要本地
  SSLRequire %{SSL_SERVER_S_DN_CN} 在 {"externalserver.com"}
  </代理>

   日志级别调试

   错误日志 /proxysetup/logs/domain1.example-error-80.log
   CustomLog /proxysetup/logs/domain1.example-access-80.log 合并

</虚拟主机>

更新 2

仍然有一个错误:

  1. 当我改变
SSLRequire %{SSL_SERVER_S_DN_CN} 在 {"externalserver.com"}

SSLRequire %{SSL_SERVER_S_DN_CN} 在 {"somethingelse.com"}

我仍然可以连接。即使添加SSLOptions +StrictRequire

  1. 当我设置SSLProxyCheckPeerName on

服务器 (externalserver.com) 的证书与 domain1.example.com 匹配。我希望它与“externalserver.com”匹配

是我做错了什么还是我偶然发现了一个错误?

相关内容