Apache-2.4

充當反向代理時添加客戶端證書

  • April 23, 2020

在充當反向代理 (Apache/NGINX) 時,我基本上遇到了與添加客戶端證書完全相同的問題,但在我的情況下,沒有 nginx 可以幫助我。

我希望虛擬主機中的某個位置充當第三方伺服器的反向代理,例如

<Location /mylocation/>
       ProxyPass          https://thirdparty.example:2345/foo/
       ProxyPassReverse   https://thirdparty.example:2345/foo/
</Location>

https://thirdparty.example:2345/foo/但是需要使用客戶端證書進行身份驗證。我想對我的使用者隱藏這個事實。不得要求他們提供客戶端證書。相反,我希望 Apache 使用儲存在伺服器上的證書。

如何才能做到這一點?

當 Apache 配置為代理時,有 2 個單獨的 HTTP(S) 連接:

  • 一個從 HTTP 客戶端到您的 Apache
  • 一個從您的 Apache 到其他伺服器

第一個連接的客戶端無法直接知道您的 Apache 正在作為代理工作,也無法知道它的確切連接位置。兩種連接或多或少同時存在。它與 HTTP 重定向完全相反,客戶端獲取新 URL,因此實際上進行了 2 個連接,但一個接一個。

因此:

我想對我的使用者隱藏這個事實。

這是通過使用 Apache 作為代理來暗示的。

不得要求他們提供客戶端證書。

他們不會,除非您的 Apache 被配置為為上述配置所涵蓋的路徑請求客戶端證書。

相反,我希望 Apache 使用儲存在伺服器上的證書。

與 TLS 相關的所有內容都在其文件的控制之下mod_ssl,位於 http://httpd.apache.org/docs/2.4/mod/mod_ssl.html

您將對SSLProxyMachineCertificateFile它及其周圍環境最感興趣,因為它是這樣描述的:

This directive sets the all-in-one file where you keep the certificates and keys used for authentication of the proxy server to remote servers. 

注意它可能出現的上下文:全域伺服器、虛擬主機或代理指令(因此你不能直接把它放在你的Location塊中)

因此,您需要添加以下內容:

<Proxy "https://thirdparty.example:2345/foo/*">
 SSLProxyMachineCertificateFile /some/path
</Proxy>

引用自:https://serverfault.com/questions/961584