Linux CentOS 6下 Nginx 安装使用 Let’ s Encrypt 证书

2018年6月13日06:48:03 发表评论 594 阅读

Let's Encrypt 是一个免费、开放,自动化的证书颁发机构,由 ISRG(Internet Security Research Group)运作。

ISRG 是一个关注网络安全的公益组织,其赞助商从非商业组织到财富100强公司都有,包括 Mozilla、Akamai、Cisco、Facebook,密歇根大学等等。ISRG 以消除资金,技术领域的障碍,全面推进加密连接成为互联网标配为自己的使命。  Linux CentOS 6下 Nginx 安装使用 Let’ s Encrypt 证书

官方网站:https://letsencrypt.org          https://certbot.eff.org/ 

申请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

三、查看证书有效期的命令

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浏览器,在地址栏点击小锁的图标,可以查看证书的详情
luqy

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: