Let's Encrypt 是一个免费、开放,自动化的证书颁发机构,由 ISRG(Internet Security Research Group)运作。
ISRG 是一个关注网络安全的公益组织,其赞助商从非商业组织到财富100强公司都有,包括 Mozilla、Akamai、Cisco、Facebook,密歇根大学等等。ISRG 以消除资金,技术领域的障碍,全面推进加密连接成为互联网标配为自己的使命。 
申请let's encript 证书可以有三种方式:
1、通过certbot脚本
2、通过支持Letencript的虚拟主机提供商
3、手工申请manual mode
一、安装certbot工具
wget https://dl.eff.org/certbot-auto ; chmod a + x certbot-auto
二、使用certbot命令初次申请证书
你不希望在发证过程中停止Web服务器,可以使用Web根目录插件通过包括获取证书certonly和--webroot在命令行上。另外,需要指定--webroot-path 或-w使用包含由Web服务器提供的文件的顶级目录。
sudo ./certbot-auto certonly --webroot -w [Web站点目录] -d [站点域名] -m [联系人email地址] --agree-tos sudo ./certbot-auto certonly --webroot -w /home/xxx.xxx.xxx -d www.example.com -m example@icloud.com
注意:联系人email地址要填写真实有效的,letsencrypt会在证书在过期以前发送预告的通知邮件。 申请成功后,会显示以下Congratulations信息
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/[xxx.xxx.xxx]/fullchain.pem. Your cert will expire on 2017-03-20. 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" - 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 ;
证书的保存位置在:
/etc/letsencrypt/live/demo.mydomain.com/
用户证书 cert.pem -> ../../archive/demo.mydomain.com/cert1.pem
中间证书 chain.pem -> ../../archive/demo.mydomain.com/chain1.pem
证书链, chain.pem + cert.pemfullchain.pem -> ../../archive/demo.mydomain.com/fullchain1.pem
证书私钥 privkey.pem -> ../../archive/demo.mydomain.com/privkey1.pem
用户证书 cert.pem -> ../../archive/demo.mydomain.com/cert1.pem
中间证书 chain.pem -> ../../archive/demo.mydomain.com/chain1.pem
证书链, chain.pem + cert.pemfullchain.pem -> ../../archive/demo.mydomain.com/fullchain1.pem
证书私钥 privkey.pem -> ../../archive/demo.mydomain.com/privkey1.pem
三、查看证书有效期的命令
openssl x509 -noout -dates -in /etc/letsencrypt/live/[demo.mydomain.com]/cert.pem
四、设置定时任务自动更新证书
letsencrypt证书的有效期是90天,但是可以用脚本去更新。
# 更新证书,在root目录下运行以下命令,cd /root 后,操作以下命令
./certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"
# 如果不需要返回的信息,可以用静默方式certbot renew --quiet
注意:更新证书时候网站必须是能访问到的
# 可以使用crontab定时更新,例如:# 每月1号5时执行执行一次更新,并重启nginx服务器
00 05 01 * * /usr/bin/certbot-auto renew --quiet && /bin/systemctl restart nginx
五、应用实例:配置nginx使用证书开通https站点
1、生成Perfect Forward Security(PFS)键值
mkdir /etc/ssl/private/ -p cd /etc/ssl/private/ openssl dhparam 2048 -out dhparam.pem
A、Perfect Forward Security(PFS)是个什么东西,中文翻译成完美前向保密,一两句话也说不清楚,反正是这几年才提倡的加强安全性的技术。如果本地还没有生成这个键值,需要先执行生成的命令。
B、生成的过程还挺花时间的,喝杯咖啡歇会儿吧。
2、配置nginx站点,例如/etc/nginx/conf.d/demo.mydomain.com.conf,样例内容如下:
server { listen 80; server_name demo.mydomain.com; rewrite ^ https://$server_name$request_uri? permanent;} server { listen 443 ssl; server_name demo.mydomain.com; charset utf-8; root /opt/www/demo.mydomain.com; index index.html index.htm; access_log /var/log/nginx/demo.mydomain.com_access.log; error_log /var/log/nginx/demo.mydomain.com_error.log; # letsencrypt生成的文件 ssl_certificate /etc/letsencrypt/live/demo.mydomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/demo.mydomain.com/privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets on; ssl_dhparam /etc/ssl/private/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #一般推荐使用的ssl_ciphers值: https://wiki.mozilla.org/Security/Server_Side_TLS ; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK'; #可用openssl ciphers列出算法套件 ssl_prefer_server_ciphers on; }
如果你的系统没有升级,可以在CentOS 6 系统上对 Python 升级至 3.x
3、在浏览器打开http://demo.mydomain.com, 如果正常跳转到https://demo.mydomain.com,就算成功了。 如果是chrome浏览器,在地址栏点击小锁的图标,可以查看证书的详情