讓Nginx快速支持TLS1.3協(xié)議

最近在看一些 TLS 協(xié)議 1.3 版本的相關(guān)知識(shí)颂郎,所以想分享一些信息,本文是第一篇容为,沒(méi)有太多的理論細(xì)節(jié)乓序,主要說(shuō)下如何在 Nginx 上快速部署一個(gè)支持 TLS 1.3 協(xié)議版本的網(wǎng)站。

幾個(gè)基本觀點(diǎn)需要牢記坎背。

1)截止到現(xiàn)在 TLS 1.3 協(xié)議仍然處于草案階段替劈,最新的 RFC 文檔是 draft 28,對(duì)于大型系統(tǒng)來(lái)說(shuō)得滤,目前并不建議部署陨献,當(dāng)然對(duì)于個(gè)人網(wǎng)站來(lái)說(shuō),可以部署 TLS 1.3 版本 懂更。

2)TLS 1.3 和 TLS 1.2 版本有很大的不同眨业,從協(xié)議消息的角度來(lái)看,兩者是不兼容的,也正因?yàn)榇伺坠茫笮拖到y(tǒng)目前不建議采用 TLS 1.3 版本谓传。

關(guān)于這兩個(gè)版本之間的差異,后續(xù)我會(huì)寫(xiě)文章詳細(xì)描述聘殖。

3)Nginx 底層使用的密碼庫(kù)是 OpenSSL晨雳,也就是說(shuō)是否支持 TLS 1.3 版本,取決于 OpenSSL 庫(kù)奸腺。

目前 Nginx 1.13 以上的版本支持 TLS 1.3 版本悍募,而 OpenSSL 1.1.1 版本支持 TLS 1.3 版本,最新的 OpenSSL 1.1.1-pre5 支持 TLS 1.3 draft 26洋机。

這篇文章運(yùn)行環(huán)境如下:

  • Ubuntu 14.04.5 LTS 系統(tǒng)
  • gcc version 4.8.4
  • Nginx nginx1.13.5
  • openssl1.1.1

如果大家在具體安裝的時(shí)候坠宴,遇到各類(lèi)問(wèn)題,可能和軟件版本绷旗、系統(tǒng)環(huán)境有關(guān)喜鼓,需要查看手冊(cè)或者在線(xiàn) Google。

安裝 OpenSSL

了解 TLS 1.3 版本衔肢,最好的工具就是 OpenSSL庄岖,所以第一步就是安裝 OpenSSL 密碼庫(kù)和命令行工具。

運(yùn)行如下命令:

$ cd /root 

# 下載源代碼 
$ wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1-pre1.tar.gz 

$ cd openssl-1.1.1-pre1

$ grep TLS1_3_VERSION_DRAFT_TXT ./* -R
# 輸出 draft 23 
./include/openssl/tls1.h:# define TLS1_3_VERSION_DRAFT_TXT  "TLS 1.3 (draft 23)"

$ ./config --prefix=/usr/local/openssl1.1.1 --openssldir=/usr/local/openssl1.1.1 --libdir=lib shared   -Wl,-R,'$(LIBRPATH)' -Wl,--enable-new-dtags enable-ec_nistp_64_gcc_128 enable-tls1_3

$ make 
$ make install 
  • 在這個(gè)版本中角骤,默認(rèn)已經(jīng)啟用 TLS 1.3 隅忿,所以不加 enable-tls1_3 參數(shù)也可以
  • OpenSSL 命令行工具和各類(lèi)包、證書(shū)文件都保存在 /usr/local/openssl1.1.1 目錄下邦尊。
  • 該版本對(duì)應(yīng)的 TLS 1.3 版本是 draft 23背桐。

說(shuō)明:如果編譯錯(cuò)誤,可以參考 issues 解決

安裝完成后蝉揍,可以使用命令行工具了解相關(guān) TLS 1.3 信息链峭。

比如運(yùn)行下列命令,了解該版本對(duì)應(yīng)的所有密碼套件又沾。

$ ./usr/local/openssl1.1.1/bin/openssl ciphers  -V tls1_3 | column -t

0x13,0x02  -  TLS_AES_256_GCM_SHA384        TLSv1.3  Kx=any  Au=any  Enc=AESGCM(256)             Mac=AEAD
0x13,0x03  -  TLS_CHACHA20_POLY1305_SHA256  TLSv1.3  Kx=any  Au=any  Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0x13,0x01  -  TLS_AES_128_GCM_SHA256        TLSv1.3  Kx=any  Au=any  Enc=AESGCM(128)             Mac=AEAD

可以看出 TLS 1.3 版本支持的密碼套件進(jìn)一步減少(增強(qiáng)了安全性)弊仪。

安裝 Nginx

Nginx 支持 TLS 1.3 版本,指定 OpenSSL 庫(kù)即可杖刷,運(yùn)行命令如下:

$ cd /root  

$ wget http://nginx.org/download/nginx-1.13.5.tar.gz 
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz

$ tar xvf pcre-8.41.tar.gz 
$ tar xvf nginx-1.13.5.tar.gz 

$ cd nginx-1.13.5

$ ./configure \
    --prefix=/usr/local/nginx1.13.5.tls1.3 \
    --with-http_ssl_module \
     --with-pcre=../pcre-8.41 \
    --with-stream \
    --with-openssl=../openssl-1.1.1-pre1 \
    --with-openssl-opt="enable-tls1_3 enable-ec_nistp_64_gcc_128" --with-pcre

$ make 
$ make install 

--with-openssl-opt 參數(shù)主要是為了配置 OpenSSL

Nginx 配置 TLS 1.3 版本

$ cd /usr/local/nginx1.13.5.tls1.3 

$ vim conf/nginx.conf 

nginx.conf 文件配置如下:

server {
    listen       443 ssl;
    server_name  www.simplehttps.com;

    ssl_certificate      /etc/letsencrypt/live/simplehttps.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/simplehttps.com/privkey.pem;
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

    ssl_protocols      TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers  on;

    ssl_ciphers     TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-1
    28-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256;
 
    location / {
        root   html;
        index  index.html index.htm;
    }
}

關(guān)于如何申請(qǐng)證書(shū)励饵,可以參考我原來(lái)的文章。

配置 TLS 1.3 版本很簡(jiǎn)單滑燃,ssl_protocols 增加 TLSv1.3 即可役听。

運(yùn)行如下命令啟動(dòng) Nginx:

$ ./sbin/nginx 

測(cè)試 TLS 1.3

使用三種方式測(cè)試網(wǎng)站是否支持 TLS 1.3 版本。

1)OpenSSL 命令行

運(yùn)行下列命令:

$ /usr/local/openssl1.1.1/bin/openssl  s_client -connect www.simplehttps.com:443  -tls1_3      

# 輸出 

New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384          

可見(jiàn) TLSv1.3 已經(jīng)成功支持。

2)Chrome

目前主流的瀏覽器都支持 TLS 1.3 版本禾嫉,具體見(jiàn)下圖:

234392-be0533bc8c71405c.png

Chrome 從 62 版本默認(rèn)開(kāi)啟 TLS 1.3 的支持灾杰,如果是 62 以下的版本,可以進(jìn)行下列的配置

(1)工具欄上打開(kāi) chrome://flags/

(2)啟用 TLS 1.3

Chrome 啟用 TLS 1.3

需要注意的是熙参,如果服務(wù)器端支持的 draft 版本和瀏覽器支持的 draft 版本不一致艳吠,那么 HTTPS 網(wǎng)站將不能訪(fǎng)問(wèn)。

(3)重新啟動(dòng)瀏覽器

然后打開(kāi)瀏覽器孽椰,對(duì) https://www.simplehttps.com 進(jìn)行測(cè)試昭娩。

chrome測(cè)試

3)Firefox

Firefox 從 47 版本默認(rèn)開(kāi)啟 TLS 1.3 的支持,如果是 47 以下的版本黍匾,可以進(jìn)行下列的配置栏渺。

(1)工具欄上打開(kāi) about:config

(2)修改 security.tls.version.max 為 4

(3)重新啟動(dòng)瀏覽器

然后打開(kāi)瀏覽器,對(duì) https://www.simplehttps.com 進(jìn)行測(cè)試锐涯。

歡迎關(guān)注我的公眾號(hào)(yudadanwx)磕诊,了解我最新的博文。
yudadanwx
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纹腌,一起剝皮案震驚了整個(gè)濱河市霎终,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌升薯,老刑警劉巖莱褒,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涎劈,居然都是意外死亡广凸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)蛛枚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谅海,“玉大人,你說(shuō)我怎么就攤上這事坤候⌒灿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵白筹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谅摄,道長(zhǎng)徒河,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任送漠,我火速辦了婚禮顽照,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己代兵,他們只是感情好尼酿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著植影,像睡著了一般裳擎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上思币,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天鹿响,我揣著相機(jī)與錄音,去河邊找鬼谷饿。 笑死惶我,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的博投。 我是一名探鬼主播绸贡,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼毅哗!你這毒婦竟也來(lái)了听怕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤黎做,失蹤者是張志新(化名)和其女友劉穎叉跛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒸殿,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筷厘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宏所。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酥艳。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖爬骤,靈堂內(nèi)的尸體忽然破棺而出充石,到底是詐尸還是另有隱情,我是刑警寧澤霞玄,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布骤铃,位于F島的核電站,受9級(jí)特大地震影響坷剧,放射性物質(zhì)發(fā)生泄漏惰爬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一惫企、第九天 我趴在偏房一處隱蔽的房頂上張望撕瞧。 院中可真熱鬧陵叽,春花似錦、人聲如沸丛版。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)页畦。三九已至胖替,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寇漫,已是汗流浹背刊殉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留州胳,地道東北人记焊。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像栓撞,于是被迫代替她去往敵國(guó)和親遍膜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 原文: 高性能網(wǎng)絡(luò)瀏覽器-第四章傳輸層安全性(Transport Layer Security,TLS) 翻譯: ...
    夢(mèng)很想家閱讀 4,627評(píng)論 2 6
  • 第一章 Nginx簡(jiǎn)介 Nginx是什么 沒(méi)有聽(tīng)過(guò)Nginx瓤湘?那么一定聽(tīng)過(guò)它的“同行”Apache吧瓢颅!Ngi...
    JokerW閱讀 32,678評(píng)論 24 1,002
  • 摘要 本文主要是在測(cè)試https服務(wù)時(shí)對(duì)搭建https服務(wù)器的一些實(shí)踐總結(jié)。TLS協(xié)議的介紹部分來(lái)源于對(duì)RFC52...
    東方胖閱讀 8,424評(píng)論 0 10
  • 為了在React項(xiàng)目中使用ES6弛说,JSX挽懦,并且實(shí)現(xiàn)熱刷新,使用React官方腳手架進(jìn)行項(xiàng)目搭建木人。使用腳手架的原因:...
    追風(fēng)的云月閱讀 209評(píng)論 0 0
  • 一直以來(lái)信柿,每次進(jìn)入新的團(tuán)隊(duì)都會(huì)被大家感嘆“年紀(jì)小,真是一臉膠原蛋白醒第∮嫒拢”我當(dāng)然很開(kāi)心聽(tīng)到這樣的夸獎(jiǎng),可也只是開(kāi)心稠曼,并...
    42_亞麗閱讀 293評(píng)論 0 0