在服務(wù)器上配置僅使用HTTPS通信的教程
HTTP 嚴(yán)格傳輸安全(HSTS)是一種安全功能,web 服務(wù)器通過它來告訴瀏覽器僅用 HTTPS 來與之通訊,而不是使用 HTTP。本文會(huì)說明如何在 Apache2、Nginx 和 Lighttpd 上如何啟用 HSTS。在主流的 web 服務(wù)器上測(cè)試通過: Nginx 1.1.19、 Lighttpd 1.4.28 和 Apache 2.2.22 ,環(huán)境為 Ubuntu 12.04、 Debian 6 & 7 和 CentOS 6,只需要調(diào)整部分參數(shù)就可以工作在其它的發(fā)行版上。
什么是 HTTP 嚴(yán)格傳輸安全?
引用自 Mozilla Developer Network:
- 如果一個(gè) web 服務(wù)器支持 HTTP 訪問,并將其重定向到 HTTPS 訪問的話,那么訪問者在重定向前的初始會(huì)話是非加密的。舉個(gè)例子,比如訪問者輸入 http://www.foo.com/ 或直接輸入 foo.com 時(shí)。
- 這就給了中間人攻擊的一個(gè)機(jī)會(huì),重定向可能會(huì)被破壞,從而定向到一個(gè)惡意站點(diǎn)而不是應(yīng)該訪問的加密頁面。
- HTTP 嚴(yán)格傳輸安全(HSTS)功能使 Web 服務(wù)器告知瀏覽器絕不使用 HTTP 訪問,在瀏覽器端自動(dòng)將所有到該站點(diǎn)的 HTTP 訪問替換為 HTTPS 訪問。
以下引自維基百科:
HSTS 可以用來抵御 SSL 剝離攻擊。SSL 剝離攻擊是中間人攻擊的一種,由 Moxie Marlinspike 于2009年發(fā)明。他在當(dāng)年的黑帽大會(huì)上發(fā)表的題為 “New Tricks For Defeating SSL In Practice” 的演講中將這種攻擊方式公開。SSL剝離的實(shí)施方法是阻止瀏覽器與服務(wù)器創(chuàng)建HTTPS連接。它的前提是用戶很少直接在地址欄輸入https://,用戶總是通過點(diǎn)擊鏈接或3xx重定向,從HTTP頁面進(jìn)入HTTPS頁面。所以攻擊者可以在用戶訪問HTTP頁面時(shí)替換所有https://開頭的鏈接為http://,達(dá)到阻止HTTPS的目的。
HSTS可以很大程度上解決SSL剝離攻擊,因?yàn)橹灰獮g覽器曾經(jīng)與服務(wù)器創(chuàng)建過一次安全連接,之后瀏覽器會(huì)強(qiáng)制使用HTTPS,即使鏈接被換成了HTTP。
另外,如果中間人使用自己的自簽名證書來進(jìn)行攻擊,瀏覽器會(huì)給出警告,但是許多用戶會(huì)忽略警告。HSTS解決了這一問題,一旦服務(wù)器發(fā)送了HSTS字段,用戶將不再允許忽略警告。
場(chǎng)景舉例:
當(dāng)你通過一個(gè)無線路由器的免費(fèi) WiFi 訪問你的網(wǎng)銀時(shí),很不幸的,這個(gè)免費(fèi) WiFi 也許就是由黑客的筆記本所提供的,他們會(huì)劫持你的原始請(qǐng)求,并將其重定向到克隆的網(wǎng)銀站點(diǎn),然后,你的所有的隱私數(shù)據(jù)都曝光在黑客眼下。
嚴(yán)格傳輸安全可以解決這個(gè)問題。如果你之前使用 HTTPS 訪問過你的網(wǎng)銀,而且網(wǎng)銀的站點(diǎn)支持 HSTS,那么你的瀏覽器就知道應(yīng)該只使用 HTTPS,無論你是否輸入了 HTTPS。這樣就防范了中間人劫持攻擊。
注意,如果你之前沒有使用 HTTPS 訪問過該站點(diǎn),那么 HSTS 是不奏效的。網(wǎng)站需要通過 HTTPS 協(xié)議告訴你的瀏覽器它支持 HSTS。
服務(wù)器開啟 HSTS 的方法是,當(dāng)客戶端通過HTTPS發(fā)出請(qǐng)求時(shí),在服務(wù)器返回的 HTTP 響應(yīng)頭中包含 Strict-Transport-Security 字段。非加密傳輸時(shí)設(shè)置的HSTS字段無效。
在 Apache2 中設(shè)置 HSTS
編輯你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:
LoadModule headers_module modules/mod_headers.so
<VirtualHost 67.89.123.45:443>
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>
現(xiàn)在你的 web 站點(diǎn)在每次訪問時(shí)都會(huì)發(fā)送該請(qǐng)求頭,失效時(shí)間是兩年(秒數(shù))。這個(gè)失效時(shí)間每次都會(huì)設(shè)置為兩年后,所以,明天你訪問時(shí),它會(huì)設(shè)置為明天的兩年后。
你只能在 HTTPS 虛擬機(jī)中設(shè)置這個(gè)頭,而不能設(shè)置在 HTTP 虛擬機(jī)中。
要將你的訪問者重定向到對(duì)應(yīng) HTTPS 站點(diǎn),可使用如下設(shè)置:
[...]
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
如果僅僅是做重定向的話,甚至不需要設(shè)置 DocumentRoot。
你也可以使用 mod_rewrite 來做重定向,但是上述的方式更簡(jiǎn)單更安全。不過,mod_rewrite 可以重定向頁面到對(duì)應(yīng)的 HTTPS 頁面,而上述配置則只重定向到“/”:
[...]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>
</VirtualHost>
不要忘記重啟 Apache。
Lighttpd
對(duì)于 lighttpd 來說很簡(jiǎn)單,將下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):
$HTTP["scheme"] == "https" {
setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}
重啟 Lighttpd。失效時(shí)間也是兩年。
Nginx
Nginx 甚至更簡(jiǎn)單,將下述行添加到你的 HTTPS 配置的 server 塊中:
不要忘記重啟 Nginx。
- 結(jié)合Python的SimpleHTTPServer源碼來解析socket通信
- 淺析Android系統(tǒng)中HTTPS通信的實(shí)現(xiàn)
- CentOS7 配置Nginx支持HTTPS訪問的實(shí)現(xiàn)方案
- JAVA利用HttpClient進(jìn)行POST請(qǐng)求(HTTPS)實(shí)例
- 微信小程序 后臺(tái)https域名綁定和免費(fèi)的https證書申請(qǐng)?jiān)斀?/a>
- Node.js開啟Https的實(shí)踐詳解
- Linux下nginx配置https協(xié)議訪問的方法
- ASP.NET Core 1.0 部署 HTTPS(.NET Core 1.0)
- IIS7/IIS7.5 URL 重寫 HTTP 重定向到 HTTPS的方法
- HTTPS 通信原理及詳細(xì)介紹
相關(guān)文章
詳解CentOS5.5 下搭建 PHP 環(huán)境(最佳的LAMP環(huán)境)
本篇文章詳細(xì)介紹了詳解CentOS5.5 下搭建 PHP 環(huán)境(最佳的LAMP環(huán)境),有需要的小伙伴可以參考下。2016-10-10Centos 64位安裝aapt、jdk、tomcat的詳細(xì)教程
這篇文章主要介紹了Centos 64位安裝aapt、jdk、tomcat的相關(guān)資料,需要的朋友可以參考下2016-11-11菜鳥學(xué)Linux命令:ssh命令(遠(yuǎn)程登錄)
本篇文章主要介紹了菜鳥學(xué)Linux命令:ssh命令 遠(yuǎn)程登錄 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06在Ubuntu中使用NTP實(shí)現(xiàn)時(shí)間同步
這篇文章主要介紹了在Ubuntu中使用NTP實(shí)現(xiàn)時(shí)間同步,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Linux服務(wù)使用寶塔面板搭建網(wǎng)站并發(fā)布公網(wǎng)訪問
寶塔面板作為簡(jiǎn)單好用的服務(wù)器運(yùn)維管理面板,它支持Linux/Windows系統(tǒng),本文我們將演示使用寶塔面板快速簡(jiǎn)單搭建本地web網(wǎng)站,并做內(nèi)網(wǎng)穿透,實(shí)現(xiàn)不在同個(gè)局域網(wǎng)下的用戶也可以訪問到本地web站點(diǎn),無需公網(wǎng)IP,也不用設(shè)置路由器,需要的朋友可以參考下2023-08-08