Apache-2.2

配置 apache 伺服器以代理 SSL 連接時出現問題

  • August 8, 2013

我正在使用 Apache Portable Runtime 在 Tomcat7 上執行應用程序,我購買了 SSL 證書並正確配置它 - 當我嘗試通過 ip:port 組合連接時,它連接正常,但警告我證書已頒發給域名,不是IP。

我正在使用的 VPS 沒有 SELinux(並且安裝有問題),這是 AFAIK 需要在 apache 中配置 SSL,所以我只想將請求路由到 Tomcat,它會在其結束。

我將 apache 配置為代理連接,首先使用完美執行的埠 80:

NameVirtualHost www.mysite.com:80
<VirtualHost www.mysite.com:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName http://www.mysite.com
ServerAlias http://www.mysite.com
ProxyPass / http://localhost:8180/MYSITE/
ProxyPassReverse / http://localhost:8180/MYSITE/
ProxyPassReverseCookiePath /MYSITE/ /
</VirtualHost>

然後使用由於某種原因不想工作的 SSL 埠:

NameVirtualHost www.mysite.com:443
<VirtualHost www.mysite.com:443>
       SSLProxyEngine On
       ProxyPreserveHost On
       ProxyRequests Off
       ServerName https://www.mysite.com
       ServerAlias https://www.mysite.com
       ProxyPass / https://localhost:8443/MYSITE/
       ProxyPassReverse / https://localhost:8443/MYSITE/
       ProxyPassReverseCookiePath /MYSITE/ /
       CacheDisable *
</VirtualHost>

編輯:我添加了

RequestHeader set Front-End-Https "On"

VirtualHost www.mysite.com:443 的指令,根據:http ://www.gossamer-threads.com/lists/apache/users/396577

這是在 Tomcat 的 server.xml 中配置的 Tomcat APR 連接器 -

<Connector port="8443" maxHttpHeaderSize="16500"
                maxThreads="150"
                enableLookups="false" disableUploadTimeout="true"
                acceptCount="100" scheme="https" secure="true"
                SSLEnabled="true"
                SSLCertificateFile="x509-cert-path"
                SSLCertificateKeyFile="key-file-path"
/>

啟用虛擬主機和重新啟動 apache 時沒有錯誤/警告。當我嘗試 https 時,這是我在 FFox 中看到的:

SSL received a record that exceeded the maximum permissible length.

(Error code: ssl_error_rx_record_too_long)

在鉻中:

Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.

Apache 的 error.log 顯示以下警告消息:

[warn] [client 216.58.38.90] proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be www.mysite.com for uri /

我花了幾天時間嘗試配置它,如果有人解釋發生了什麼以及如何修復它,我將不勝感激。

非常感謝。勝利者。

您收到的錯誤可能是由於您的客戶端 (Firefox) 正在嘗試使用 SSL,但您的 Apache 虛擬主機沒有啟用 SSL。

為了讓您的客戶端能夠通過 SSL 與您的前端代理進行通信,您需要在前端而不是在 Tomcat 中執行 SSL。在 Apache 和 Tomcat 之間使用 SSL 絕對沒有任何好處。

在您的<VirtualHost>街區中,您至少需要:

SSLEngine On
SSLCertificateFile ...
SSLCertificateKeyFile ...

另外,請注意 htat SELinux 與 SSL 完全無關,除了錯誤配置的 SELinux 環境可能會阻止 Apache 讀取必要的 SSL 證書這一事實。

如果您沒有將 Apache 用作簡單代理以外的任何東西,並且您真的對 Apache 配置不滿意,那麼理論上您可以擺脫它並讓 Tomcat 在埠 443 上偵聽(通過修改適當的Connector塊)。

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