如何在 Apache HTTPD 伺服器中配置傳輸機密?
VirtualHost
我們的 Apache 2.2 伺服器配置中只有一個:<VirtualHost _default_:443>
我們的客戶希望能夠在瀏覽器中只輸入 HTTP 中的伺服器名稱(例如 10.10.0.1),伺服器會自動重定向到 HTTPS。因此,我們需要添加一項
VirtualHost
並使用以下命令配置重定向到 HTTPRewriteEngine
:<VirtualHost *:80> RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{REMOTE_HOST} !^127\.0\.0\.1.*$ RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </VirtualHost>
問題:是否可以在 Apache HTTPD 伺服器中配置傳輸機密?我們希望找到類似於以下 web.xml 配置的配置:
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
添加
我們的要求:我們希望 100% 確保即使我們為 HTTP 連接打開了埠 80(允許非加密連接),也不能從埠 80 發送或接收數據。在 Java 中(請參閱下面的 Java 定義),如果配置了 CONFIDENTIAL並且伺服器配置了加密和非加密連接(HTTP 和 HTTPS),僅使用 HTTPS。
我們希望找到允許類似配置的類似配置/Apache 模組。
來自http://docs.oracle.com/javaee/5/tutorial/doc/bnbxw.html: 當應用程序要求傳輸數據時指定 CONFIDENTIAL 以防止其他實體觀察傳輸的內容。
我不是一個出色的 Java 專家,但據我了解,傳輸保證機密意味著數據將在傳輸過程中被加密,以便其他人無法讀取它。
如果是這樣,那麼通過將每個人重定向到 SSL(這基本上意味著加密),您已經做到了。
要擴展上述答案:
Apache 配置與 Java 配置根本不同,因此您不能總是將一個概念從另一個概念轉移。不幸的是,這是這個概念並沒有真正翻譯得很好的時候之一。Apache 不會加密埠 80 上的流量,除非您命令它,這對瀏覽器不利。您可以做的是確保埠 80 上發生的唯一流量是一回事,而且只有一件事 - 無論使用者嘗試訪問什麼,都應該重定向到 SSL 站點。這意味著 apache 將不會在埠 80 上提供任何頁面、腳本、代理流量。(除非您允許來自本地主機的非加密流量,我認為這是故意的。)
讓我補充一點,我在一家銀行工作。將埠 80 重定向到埠 443 是我們用來強制對某些站點上的流量進行加密的方法。這絕不會允許未加密的流量通過。
如果您想確保雙重確定,您可以設置一個完全獨立的 apache 配置目錄,該目錄僅偵聽埠 80,並將其 DocumentRoot 設置為 /var/www/notwanted/,該目錄本身僅包含一個帶有對其進行重定向。這樣,您可以使兩個實體更加分離,使用單獨的日誌文件等。從技術角度來看,我認為這沒有必要,但它可能會使服務的管理更加容易。