我的 HTTPS 升級(jí)之旅

本文將介紹我是如何將一個(gè) HTTP 網(wǎng)站升級(jí)到 HTTPS。系統(tǒng)環(huán)境:CentOS 7.0 + Nginx 1.12.0

前言

先貼一個(gè)福利掐隐,也作為沒有啟用 HTTPS 的反面教材:

福利.png

這是我參與開發(fā)過的一個(gè)外包網(wǎng)站韵卤,沒有啟用 HTTPS脏款,網(wǎng)站頁面被中間人劫持辐宾,并插入了一些奇怪的東西买猖。下面是正文刁笙。

預(yù)備條件

本文假定你已經(jīng)擁有一個(gè)正確解析到服務(wù)器IP的域名破花,服務(wù)器上已安裝 Nginx。Nginx 可以通過源碼編譯安裝疲吸,也可以使用系統(tǒng)提供的包管理器安裝座每,比如 RH 系的 yum 或者 Debian 系的 apt-get,具體步驟自行Google摘悴。

獲取證書

HTTPS 證書分三類:1. DV 域名驗(yàn)證證書 2. OV 組織機(jī)構(gòu)驗(yàn)證證書 3. EV 增強(qiáng)的組織機(jī)構(gòu)驗(yàn)證證書峭梳。每類證書的審核要求不同,在瀏覽器地址欄也會(huì)有區(qū)分蹂喻,對(duì)于個(gè)人網(wǎng)站而言葱椭,使用免費(fèi)的 DV 證書就足夠了。

我使用了大名鼎鼎的 Let's Encrypt 來生成證書口四。

1. 安裝 certbot

certbot 是 Let's Encrypt 提供的一套自動(dòng)化工具孵运。

yum install epel-release
yum install certbot
2. 生成證書

這里采用 webroot 作為 Let's Encrypt 的認(rèn)證方式。

certbot certonly -a webroot --webroot-path=/your/project/path -d example.com -d www.example.com

webroot-path就是你的項(xiàng)目路徑蔓彩,使用 -d 可以添加多個(gè)域名治笨。這時(shí)證書就已經(jīng)生成成功了驳概,默認(rèn)保存在 /etc/letsencrypt/live/example.com/ 下。證書文件包括:

  • cert.pem: 服務(wù)端證書
  • chain.pem: 瀏覽器需要的所有證書但不包括服務(wù)端證書旷赖,比如根證書和中間證書
  • fullchain.pem: 包括了cert.pem和chain.pem的內(nèi)容
  • privkey.pem: 證書私鑰
3. 生成迪菲-赫爾曼密鑰交換組( Strong Diffie-Hellman Group)

為了進(jìn)一步提高安全性顺又,你也可以生成一個(gè) Strong Diffie-Hellman Group。

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

如果沒有安裝 openssl杠愧,這里要先安裝一下待榔。

yum install openssl

配置 Nginx

編輯 Nginx 配置文件,如果你不知道配置文件在哪流济,可以用 locate /nginx.conf 命令查找锐锣。添加以下內(nèi)容,具體參數(shù)以你的實(shí)際情況為準(zhǔn)绳瘟。

server {
    listen 443 ssl;
    # 啟用http2
    # 需要安裝 Nginx Http2 Module
    # listen 443 http2 ssl;
    server_name example.com www.example.com;
    #證書文件
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    #私鑰文件
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # 優(yōu)先采取服務(wù)器算法
    ssl_prefer_server_ciphers on;
    # 定義算法
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
   
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    # 使用DH文件
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location ~ /.well-known {
        allow all;
    }

    root /your/project/path;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

解釋一下其中幾項(xiàng)配置:

ssl_stapling on;

開啟 OCSP Stapling雕憔,使服務(wù)端主動(dòng)獲取 OCSP 查詢結(jié)果并隨著證書一起發(fā)送給客戶端,從而讓客戶端跳過自己去驗(yàn)證的過程糖声,提高 TLS 握手效率斤彼。

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";

啟用 HSTS 策略,強(qiáng)制瀏覽器使用 HTTPS 連接蘸泻,max-age設(shè)置單位時(shí)間內(nèi)強(qiáng)制使用 HTTPS 連接琉苇;includeSubDomains 可選,設(shè)置所有子域同時(shí)生效悦施。瀏覽器在獲取該響應(yīng)頭后并扇,在 max-age 的時(shí)間內(nèi),如果遇到 HTTP 連接抡诞,就會(huì)通過 307 跳轉(zhuǎn)強(qiáng)制使用 HTTPS 進(jìn)行連接

    add_header X-Frame-Options DENY;

添加 X-Frame-Options 響應(yīng)頭穷蛹,可以禁止網(wǎng)站被嵌入到 iframe 中,減少點(diǎn)擊劫持 (clickjacking)攻擊昼汗。

    add_header X-Content-Type-Options nosniff;

添加 X-Content-Type-Options 響應(yīng)頭肴熏,防止 MIME 類型嗅探攻擊

解釋完畢。繼續(xù)顷窒,來測(cè)試 nginx.conf 是否有語法錯(cuò)誤

nginx -t

重啟 Nginx

nginx -s reload

重定向 HTTP 到 HTTPS

修改原來 HTTP 網(wǎng)站的 Nginx 配置蛙吏。

server {
    listen 80;
    server_name example.com www.example.com;
    access_log /var/log/example/access.log;
    error_log /var/log/example/error.log;
    # 301 永久重定向
    return 301 https://$host$request_uri;
    location / {
        root /your/project/path;
        index index.html index.htm;
    }
}

這時(shí)再訪問網(wǎng)站,瀏覽器地址欄就會(huì)出現(xiàn)一把小鎖鞋吉。


https.png

一旦升級(jí) HTTPS出刷,網(wǎng)站內(nèi)的所有資源文件和請(qǐng)求的協(xié)議也必須為 HTTPS,你需要在前端代碼里修改一下坯辩。

最后可以使用 ssllabs 測(cè)試一下網(wǎng)站的安全性,我的網(wǎng)站得了 A+??


參考鏈接:
Nginx 配置 HTTPS 服務(wù)器
How To Secure Nginx with Let's Encrypt on CentOS 7

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末崩侠,一起剝皮案震驚了整個(gè)濱河市漆魔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖改抡,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矢炼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阿纤,警方通過查閱死者的電腦和手機(jī)句灌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欠拾,“玉大人胰锌,你說我怎么就攤上這事∶暾” “怎么了资昧?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)荆忍。 經(jīng)常有香客問我,道長(zhǎng)刹枉,這世上最難降的妖魔是什么叽唱? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮棺亭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芥吟。我一直安慰自己侦铜,他們只是感情好钟鸵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棺耍,像睡著了一般贡未。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒙袍,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音害幅,去河邊找鬼消恍。 笑死以现,一個(gè)胖子當(dāng)著我的面吹牛狠怨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佣赖,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恰矩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了外傅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤俩檬,失蹤者是張志新(化名)和其女友劉穎萎胰,沒想到半個(gè)月后豆胸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奥洼,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年晚胡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灵奖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡估盘,死狀恐怖瓷患,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遣妥,我是刑警寧澤擅编,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站箫踩,受9級(jí)特大地震影響爱态,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜境钟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一锦担、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慨削,春花似錦洞渔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至玫芦,卻和暖如春浆熔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桥帆。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工蘸拔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留师郑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓调窍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親张遭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邓萨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容