我正在嘗試學習 Apache 伺服器配置的基礎知識,並想知道 Apache 不同範圍內 SSL 指令的有效性。
這些指令;
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/apache.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/apache.key"
SSLRequireSSL ...
它們可以放置在哪裡?僅在 VirtualHost 部分?如果我將它們放在全域範圍內,它們會起作用嗎?
抱歉,如果這個問題在某種程度上脫離了上下文,我對 Apache 仍然有一些全面的問題:)
答案1
歡迎來到阿帕契的世界!第一課是學習如何閱讀優秀的文件。在 Apache 文件中,每個指令都有一個情境指示該指令在伺服器設定檔中的哪些位置是合法的部分。它位於Syntax:
和Default:
行的正下方。
伺服器配置這意味著該指令可以在伺服器設定檔(例如,
httpd.conf
)中使用,但不能在任何容器中<VirtualHost>
使用<Directory>
。.htaccess
文件中根本不允許這樣做 。虛擬主機此上下文意味著該指令可能出現在
<VirtualHost>
伺服器設定檔的容器內。目錄標記為在此上下文中有效的指令可以在伺服器設定檔中的
<Directory>
、<Location>
、<Files>
、<If>
和<Proxy>
容器內使用,但須遵守配置部分中概述的限制。.htaccess如果指令在此上下文中有效,則表示它可以出現在每個目錄的 .htaccess 檔案中。儘管取決於當前活動的覆蓋,但它可能不會被處理。
和SSLEngine
,SSLCertificateFile
,SSLCertificateKeyFile
上下文是伺服器配置和虛擬主機。這意味著您可以為整個伺服器指定它們,也可以覆蓋每個<VirtualHost>
.
這SSLRequireSSL
指示另一方面在目錄和 .htaccess 上下文中是合法的。這意味著您可以透過將其放置在目錄中來指定不應允許非 TLS 連接,即使存在單獨的 HTTP 虛擬主機(否則將服務該目錄)。
然而,如今您應該使用 TLS 來保護一切,從而避免SSLRequireSSL
不必要的麻煩。將所有 HTTP 重定向到 HTTPS 並透過HTTP 嚴格傳輸安全(HSTS) 政策 (RFC 6797)。