在nginx 使用Let’s Encrypt 免費的SSL/TLS 證書

謝權2016年2月22日Program6 Comments

Let’s Encrypt是一個將于2015年末推出的數字證書認證機構,將通過旨在消除當前手動創建和安裝證書的復雜過程的自動化流程,為安全網站提供免費的SSL/TLS證書。[1][2]

Let’s Encrypt 是由互聯網安全研究小組(ISRG,一個公益組織)提供的服務。主要贊助商包括電子前哨基金會Mozilla基金會Akamai以及思科。2015年4月9日,ISRG與Linux基金會宣布合作。

用以實現這一新的數字證書認證機構的協議被稱為自動證書管理環境(ACME)。GitHub上有這一規范的草案,且提案的一個版本已作為一個Internet草案發布。

Let’s Encrypt 宣稱這一過程將十分簡單、自動化并且免費。

2015年8月7日,該服務更新其推出計劃,預計將在2015年9月7日當周某時發布首個證書,隨后向列入白名單的域名發行少量證書并逐漸擴大發行。若一切按計劃進行,該服務預計將在2015年11月16日當周某時全面開始提供。

首先下載Let’s Encrypt Client

$sudoapt-getupdate

$sudoapt-getinstall-ygit

$sudogitclonehttps://github.com/letsencrypt/letsencrypt /opt/letsencrypt

$cd/opt/letsencrypt

$sudo./letsencrypt-auto

為Let’s Encrypt Temporary File創建一個模板

我們在webroot-path/.well-known/acme-challenge/通過Let’s Encrypt client創建一個臨時文件包含了使用Encrypt server驗證你域名去獲得驗證的token 。webroot?path在我們接下來的示例中代表/var/www/letsencrypt

我們通過這個GitHub Gist創建一個模板文件包含Let’s Encryp需要發出的證書,不使用模板的話我們可以通過Let’s Encrypt 命令行來設置參數。

1.創建Let’s Encrypt保存臨時文件的目錄和指定需要的權限:

$cd/var/www

$mkdirletsencrypt

$sudochgroupwww-dataletsencrypt

2.創建/etc/letsencrypt/configs/my-domain.conf文件,my?domain是你需要實現https的域名拷貝Gist里面的內容,然后為domains,rsa-key-size,server和email這幾個字段指定合適的值

# the domain we want to get the cert for;

# technically it's possible to have multiple of this lines, but it only worked

# with one domain for me, another one only got one cert, so I would recommend

# separate config files per domain.

domains=my-domain

# increase key size

rsa-key-size=2048# Or 4096

# the current closed beta (as of 2015-Nov-07) is using this server

server=https://acme-v01.api.letsencrypt.org/directory

# this address will receive renewal reminders

email=my-email

# turn off the ncurses UI, we want this to be run as a cronjob

text=True

# authenticate by placing a file in the webroot (under .well-known/acme-challenge/)

# and then letting LE fetch it

authenticator=webroot

webroot-path=/var/www/letsencrypt/

讓Let’s Encrypt去訪問臨時文件

1.在Nginx 中配置一個虛擬server

server{

listen80default_server;

server_namemy-domain;

location/.well-known/acme-challenge{

root/var/www/letsencrypt;

}

...

}

2.驗證配置文件然后重新啟動Nginx

$sudonginx-t&&sudonginx-sreload

請求證書

通過上面的步驟我們萬事俱備了,我們可以請求證書了。

$cd/opt/letsencrypt

$./letsencrypt-auto--config/etc/letsencrypt/configs/my-domain.confcertonly

Updatingletsencryptandvirtualenvironmentdependencies......

Requestingrootprivilegestorunwithvirtualenv:/root/.local/share/letsencrypt/bin/letsencrypt--config/etc/letsencrypt/configs/my-domain.confcertonly

IMPORTANTNOTES:

-Congratulations!Yourcertificateandchainhavebeensavedat

/etc/letsencrypt/live/my-domain/fullchain.pem.Yourcert

willexpireondate.Toobtainanewversionofthe

certificateinthefuture,simplyrunLet'sEncryptagain.

Nginx加載證書

1.在Nginx的配置文件中添加下面內容(這里默認你是會配置Nginx)

server{

listen443ssldefault_server;

server_namemy-domain;

ssl_certificate/etc/letsencrypt/live/my-domain/fullchain.pem;

ssl_certificate_key/etc/letsencrypt/live/my-domain/privkey.pem;

...

}

2.重新啟動Nginx,Nginx每修改一次配置文件都需要通過重啟加載新的配置

1

$sudonginx-t&&sudonginx-sreload

自動申請Let’s Encrypt Certificates的有效期

Let’s Encrypt certificates的免費使用時間只有90天,時間到了之后我們就需要重新續簽就像簽證一樣。可能你會忘記。然而我們可以通過cron 這個程序來幫助我們完成自動操作

1.我們可以創建一個shell 腳本

#!/bin/sh

cd/opt/letsencrypt/

./letsencrypt-auto--config/etc/letsencrypt/configs/my-domain.confcertonly

if[$?-ne0]

then

ERRORLOG=`tail/var/log/letsencrypt/letsencrypt.log`

echo-e"The Let's Encrypt cert has not been renewed! \n \n"\

$ERRORLOG

else

nginx-sreload

fi

exit0

2.創建一個/var/log/letsencrypt/目錄

3.運行crontab-e 讓我們寫的腳本程序每2個月執行一次

001JAN,MAR,MAY,JUL,SEP,NOV */path/to/renew-letsencrypt.sh

Nginx官方教程:https://www.nginx.com/blog/free-certificates-lets-encrypt-and-nginx/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容