在Ubuntu 18.04上使用Let’s Encrypt保護(hù)Nginx

Let's Encrypt是由互聯(lián)網(wǎng)安全研究組(ISRG)開發(fā)的免費(fèi)開放認(rèn)證機(jī)構(gòu)逮光。 Let's Encrypt頒發(fā)的證書現(xiàn)在幾乎所有瀏覽器都信任。
我們將逐步提供關(guān)于如何使用Ubuntu18.04上的certbot工具使用Let's Encrypt保護(hù)Nginx的說明慨代。

先決條件

請(qǐng)確保已滿足以下先決條件:

  • 有一個(gè)指向服務(wù)器IP的域名,假設(shè):example.com。
  • 安裝 nginx并配置好域名。

安裝Certbot

更新軟件包列表并安裝certbot軟件包:

sudo apt update
sudo apt install certbot

生成 Dh(Diffie-Hellman)組

Diffie-Hellman密鑰交換(DH)是通過不安全的通信信道安全地交換加密密鑰的方法佳头。 我們將生成一組新的2048位DH參數(shù)以加強(qiáng)安全性:

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

如果你喜歡,你可以改變大小到4096位晴氨,但在這種情況下康嘉,生成可能需要超過30分鐘,這取決于系統(tǒng)熵籽前。

獲取SSL證書

要獲取我們域的SSL證書亭珍,我們將使用Webroot插件,該插件通過在${webroot-path}/.well-known/acme-challenge目錄中創(chuàng)建所請(qǐng)求域的臨時(shí)文件枝哄,以及Let's Encrypt 驗(yàn)證服務(wù)器會(huì)使HTTP請(qǐng)求驗(yàn)證所請(qǐng)求域的DNS是否解析到運(yùn)行certbot的服務(wù)器肄梨。

為了使它更簡(jiǎn)單,我們將把 .well-known/acme-challenge的所有HTTP請(qǐng)求映射到單個(gè)目錄/var/lib/letsencrypt挠锥。 以下命令將創(chuàng)建該目錄并將其設(shè)置為可寫入nginx服務(wù)器众羡。

sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt

現(xiàn)在可以運(yùn)行帶有webroot插件的Certbot,并通過發(fā)出以下命令獲取SSL證書文件:

sudo certbot certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

如果SSL證書成功獲取蓖租,certbot將打印以下消息:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live/example.com/fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live/example.com/privkey.pem
  Your cert will expire on 2018-07-28. To obtain a new or tweaked
  version of this certificate in the future, simply run certbot
  again. To non-interactively renew *all* of your certificates, run
  "certbot renew"
 - Your account credentials have been saved in your Certbot
  configuration directory at /etc/letsencrypt. You should make a
  secure backup of this folder now. This configuration directory will
  also contain certificates and private keys obtained by Certbot so
  making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

  Donating to ISRG / Let's Encrypt:  https://letsencrypt.org/donate
  Donating to EFF:                    https://eff.org/donate-le

現(xiàn)在您已擁有證書文件粱侣,可以開始配置nginx服務(wù)。為避免重復(fù)代碼蓖宦,先創(chuàng)建以下兩個(gè)片段齐婴,我們將在所有nginx服務(wù)塊中使用這兩個(gè)片段:

  • /etc/nginx/snippets/letsencrypt.conf:
location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}
  • /etc/nginx/snippets/ssl.conf:
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

上面的代碼片段使用了Mozilla的 chippers recomendend,支持OCSP Stapling稠茂,HTTP嚴(yán)格傳輸安全性(HSTS)柠偶,并強(qiáng)制實(shí)施少量以安全為重點(diǎn)的HTTP標(biāo)頭。 一旦創(chuàng)建了片段主慰,打開域服務(wù)器塊并包含letsencrypt.conf snippet嚣州,您可以按如下方式編輯域服務(wù)器塊:

  • /etc/nginx/sites-available/example.com:
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    # . . . other code

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;

    # . . . other code
}

通過上面的配置,我們強(qiáng)制HTTPS并從www重定向到非www版本共螺。

最后该肴,重新加載nginx服務(wù)以使更改生效:

sudo systemctl reload nginx

SSL證書自動(dòng)續(xù)訂

讓我們加密的證書有效期為90天。 要在證書過期之前自動(dòng)續(xù)訂證書藐不,certbot軟件包將創(chuàng)建一個(gè)每天運(yùn)行兩次的cron job匀哄,并且將在證書到期前30天自動(dòng)續(xù)訂任何證書。

由于我們?cè)谧C書更新后使用certbot webroot插件雏蛮,我們還必須重新加載nginx服務(wù)涎嚼。 將--renew-hook "systemctl reload reload"添加到/etc/cron.d/certbot文件中,使其看起來像這樣:

  • /etc/cron.d/certbot:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

要測(cè)試?yán)m(xù)訂過程挑秉,您可以使用certbot --dry-run開關(guān):

sudo certbot renew --dry-run

如果沒有錯(cuò)誤法梯,則意味著更新過程成功。

就這樣!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末立哑,一起剝皮案震驚了整個(gè)濱河市夜惭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铛绰,老刑警劉巖诈茧,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捂掰,居然都是意外死亡敢会,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門这嚣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸥昏,“玉大人,你說我怎么就攤上這事疤苹』ス悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵卧土,是天一觀的道長(zhǎng)惫皱。 經(jīng)常有香客問我,道長(zhǎng)尤莺,這世上最難降的妖魔是什么旅敷? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮颤霎,結(jié)果婚禮上媳谁,老公的妹妹穿的比我還像新娘。我一直安慰自己友酱,他們只是感情好晴音,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缔杉,像睡著了一般锤躁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上或详,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天系羞,我揣著相機(jī)與錄音,去河邊找鬼霸琴。 笑死椒振,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梧乘。 我是一名探鬼主播澎迎,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了夹供?” 一聲冷哼從身側(cè)響起辑莫,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罩引,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枝笨,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袁铐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了横浑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剔桨。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖徙融,靈堂內(nèi)的尸體忽然破棺而出洒缀,到底是詐尸還是另有隱情,我是刑警寧澤欺冀,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布树绩,位于F島的核電站,受9級(jí)特大地震影響隐轩,放射性物質(zhì)發(fā)生泄漏饺饭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一职车、第九天 我趴在偏房一處隱蔽的房頂上張望瘫俊。 院中可真熱鬧,春花似錦悴灵、人聲如沸扛芽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽川尖。三九已至,卻和暖如春赡鲜,著一層夾襖步出監(jiān)牢的瞬間空厌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國打工银酬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘲更,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓揩瞪,卻偏偏與公主長(zhǎng)得像赋朦,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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