謝權(quán)2016年2月22日Program6 Comments
Let’s Encrypt是一個(gè)將于2015年末推出的數(shù)字證書認(rèn)證機(jī)構(gòu)垢夹,將通過旨在消除當(dāng)前手動(dòng)創(chuàng)建和安裝證書的復(fù)雜過程的自動(dòng)化流程惹想,為安全網(wǎng)站提供免費(fèi)的SSL/TLS證書张惹。[1][2]
Let’s Encrypt 是由互聯(lián)網(wǎng)安全研究小組(ISRG,一個(gè)公益組織)提供的服務(wù)本姥。主要贊助商包括電子前哨基金會(huì)绽快,Mozilla基金會(huì)形病,Akamai以及思科。2015年4月9日蛾找,ISRG與Linux基金會(huì)宣布合作娩脾。
用以實(shí)現(xiàn)這一新的數(shù)字證書認(rèn)證機(jī)構(gòu)的協(xié)議被稱為自動(dòng)證書管理環(huán)境(ACME)。GitHub上有這一規(guī)范的草案打毛,且提案的一個(gè)版本已作為一個(gè)Internet草案發(fā)布柿赊。
Let’s Encrypt 宣稱這一過程將十分簡(jiǎn)單、自動(dòng)化并且免費(fèi)幻枉。
2015年8月7日碰声,該服務(wù)更新其推出計(jì)劃,預(yù)計(jì)將在2015年9月7日當(dāng)周某時(shí)發(fā)布首個(gè)證書熬甫,隨后向列入白名單的域名發(fā)行少量證書并逐漸擴(kuò)大發(fā)行胰挑。若一切按計(jì)劃進(jìn)行,該服務(wù)預(yù)計(jì)將在2015年11月16日當(dāng)周某時(shí)全面開始提供。
首先下載Let’s Encrypt Client
$sudoapt-getupdate
$sudoapt-getinstall-ygit
$sudogitclonehttps://github.com/letsencrypt/letsencrypt /opt/letsencrypt
$cd/opt/letsencrypt
$sudo./letsencrypt-auto
為L(zhǎng)et’s Encrypt Temporary File創(chuàng)建一個(gè)模板
我們?cè)?b>webroot-path/.well-known/acme-challenge/通過Let’s Encrypt client創(chuàng)建一個(gè)臨時(shí)文件包含了使用Encrypt server驗(yàn)證你域名去獲得驗(yàn)證的token 瞻颂。webroot?path在我們接下來的示例中代表/var/www/letsencrypt
我們通過這個(gè)GitHub Gist創(chuàng)建一個(gè)模板文件包含Let’s Encryp需要發(fā)出的證書脚粟,不使用模板的話我們可以通過Let’s Encrypt 命令行來設(shè)置參數(shù)。
1.創(chuàng)建Let’s Encrypt保存臨時(shí)文件的目錄和指定需要的權(quán)限:
$cd/var/www
$mkdirletsencrypt
$sudochgroupwww-dataletsencrypt
2.創(chuàng)建/etc/letsencrypt/configs/my-domain.conf文件蘸朋,my?domain是你需要實(shí)現(xiàn)https的域名拷貝Gist里面的內(nèi)容核无,然后為domains,rsa-key-size藕坯,server和email這幾個(gè)字段指定合適的值
# 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去訪問臨時(shí)文件
1.在Nginx 中配置一個(gè)虛擬server
server{
listen80default_server;
server_namemy-domain;
location/.well-known/acme-challenge{
root/var/www/letsencrypt;
}
...
}
2.驗(yàn)證配置文件然后重新啟動(dòng)Nginx
$sudonginx-t&&sudonginx-sreload
請(qǐng)求證書
通過上面的步驟我們?nèi)f事俱備了团南,我們可以請(qǐng)求證書了。
$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的配置文件中添加下面內(nèi)容(這里默認(rèn)你是會(huì)配置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.重新啟動(dòng)Nginx炼彪,Nginx每修改一次配置文件都需要通過重啟加載新的配置
1
$sudonginx-t&&sudonginx-sreload
自動(dòng)申請(qǐng)Let’s Encrypt Certificates的有效期
Let’s Encrypt certificates的免費(fèi)使用時(shí)間只有90天吐根,時(shí)間到了之后我們就需要重新續(xù)簽就像簽證一樣》恚可能你會(huì)忘記拷橘。然而我們可以通過cron 這個(gè)程序來幫助我們完成自動(dòng)操作
1.我們可以創(chuàng)建一個(gè)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.創(chuàng)建一個(gè)/var/log/letsencrypt/目錄
3.運(yùn)行crontab-e 讓我們寫的腳本程序每2個(gè)月執(zhí)行一次
001JAN,MAR,MAY,JUL,SEP,NOV */path/to/renew-letsencrypt.sh
Nginx官方教程:https://www.nginx.com/blog/free-certificates-lets-encrypt-and-nginx/