update on 181011:php
Standalone vs Webroot 方式对比
https://moxo.io/blog/2018/01/30/obtain-and-renew-tls-certs-using-letsencrypt/html
若是是测试环境,我认为stand alone方式最简便。生产环境,最好用商业的证书,或者webroot方式。linux
若是使用了 Let's Encrypt的证书,必定要作crontab任务,使用certbot-auto 定时更新证书,防止过时前忘记更新。nginx
使用 Let’s Encrypt 申请 TLS 证书,抛开官方给的 Apache/Nginx plugin,主要能够分为 Standanlone 和 Webroot 两种认证方式,主要区别在于:git
A/AAAA
记录将 site.com 指向了 12.34.56.78
这个 IP,此时使用 Standalone 不会有问题,但一旦打开 CDN,极可能首先 IP 就会变成 CDN 分配的 87.65.43.21
,而 Standalone 的验证方式又须要请求 IP 和提供的 IP 彻底一致,因此会致使验证失败;
本文是转载,来源:github
LinuxStory 原创教程: https://linuxstory.org/deploy-lets-encrypt-ssl-certificate-with-certbot/web
、http 和 https 是什么?编程
简单来讲,http 是一个传输网页内容的协议,好比你看到的 http 开头的网站 http://www.163.com,其网页上的文字、图片、 CSS 、 JS 等文件都是经过 http 协议传输到咱们的浏览器,而后被咱们看到。浏览器
而 https 能够理解为“ HTTP over SSL/TLS ”,好端端的 http 为何须要“ over SSL/TLS”呢,由于 http 是明文传输的,经过 http 协议传输的内容很容易被偷看和篡改,为了安全(你确定不想被人偷看或者篡改网页内容吧,好比网站银行密码什么的。)就为 http 协议再加上了一层 SSL/TLS 安全协议,因此就有了 https 。安全
二、SSL/TLS 是什么?
“ HTTP over SSL/TLS ”字面意思就是带“安全套接层”的 http 协议,心里纯洁的同窗也能够理解为“带安全套的 http ”,由于带了安全套,因此固然会比较安全(/(ㄒoㄒ)/~~)。其中 SSL 是“ Secure Sockets Layer ” 的缩写,是“安全套接层”的意思。 TLS 是 “Transport Layer Security” 的缩写,是 ” 传输层安全协议 ” 的意思。 SSL 和 TLS 是同一个东西的不一样阶段,理解为同一个东西也行,都是安全协议就对了。
三、为何要部署 https?
说到底,就是 https 更安全。甚至为了安全,一个专业可靠的网站, https 是必须的。 Firefox 和 Chrome 都计划将没有配置 SSL 加密的 http 网站标记为不安全(貌似 Firefox 50 已经这么干了),目前它们也正在联合其余相关的基金会与公司推进整个互联网 https 化,如今你们访问的一些主要的网站。如 Google 多年前就已经所有启用 https ,国内的淘宝、搜狗、知乎、百度等等也全面 https 了。甚至 Google 的搜索结果也正在给予 https 的网站更高的排名和优先收录权。
四、怎么部署 https 呢?
你只须要有一张被信任的 CA ( Certificate Authority )也就是证书受权中心颁发的 SSL 安全证书,而且将它部署到你的网站服务器上。一旦部署成功后,当用户访问你的网站时,浏览器会在显示的网址前加一把小绿锁,代表这个网站是安全的,固然同时你也会看到网址前的前缀变成了 https ,再也不是 http 了。
五、怎么得到 SSL 安全证书呢?
理论上,咱们本身也能够签发 SSL 安全证书,可是咱们本身签发的安全证书不会被主流的浏览器信任,因此咱们须要被信任的证书受权中心( CA )签发的安全证书。而通常的 SSL 安全证书签发服务都比较贵,好比 Godaddy 、 GlobalSign 等机构签发的证书通常都须要20美金一年甚至更贵,不过为了加快推广 https 的普及, EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书。这个免费证书不只免费,并且还至关好用,因此咱们就能够利用 Let’s Encrypt 提供的免费证书部署 https 了。那么怎么得到 Let’s Encrypt 安全证书,而且将它部署在本身的网站服务器上呢?这就是这篇文章要讲的内容了。
注:对 https 、数字证书及 CA 的工做原理感兴趣的同窗能够阅读编程随想的系列文章。
前面已经介绍过, Let’s Encrypt 是 一个叫 ISRG ( Internet Security Research Group ,互联网安全研究小组)的组织推出的免费安全证书计划。参与这个计划的组织和公司能够说是互联网顶顶重要的先驱,除了前文提到的三个牛气哄哄的发起单位外,后来又有思科(全球网络设备制造商执牛耳者)、 Akamai 加入,甚至连 Linux 基金会也加入了合做,这些大牌组织的加入保证了这个项目的可信度和可持续性。
尽管项目自己以及有该项目签发的证书很可信,但一开始 Let’s Encrypt 的安全证书配置起来比较麻烦,须要手动获取及部署。存在必定的门槛,没有一些技术底子可能比较难搞定。而后有一些网友就本身作了一些脚原本优化和简化部署过程。其中有一个网友 xdtianyu 作了一个能够快速获取及更新证书的 letsencrypt.sh 脚本被普遍使用,地址以下:
1 |
https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.sh |
首先要感谢 xdtianyu 同窗的努力付出。我以前用的也是这个脚本,不知道是否是姿式不对,虽然顺利地按照流程装上了,但用 SSLlabs 检测我配的网站仍是不太安全,在不少浏览器上都被标注为“不安全”。当时由于忙也没有太多时间折腾和细究,不事后来 ISRG 的发起者 EFF (电子前哨基金会)为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它能够彻底自动化的获取、部署和更新安全证书。这真是很是容易、方便呀,因此咱们就能够直接使用官方客户端,不须要再使用第三方的工具了。虽然第三方工具也可使用,可是官方工具更权威,风险也更小,并且遇到问题也更容易解决,毕竟有官方的支持。况且 Certbot 确实很是方便,也比全部的第三方工具都更方便,何乐而不用呢?
Certbot 的官方网站是 https://certbot.eff.org/ ,打开这个连接选择本身使用的 web server 和操做系统,EFF 官方会给出详细的使用方法,以下图,不过我以为这样仍是太复杂,太麻烦,因此建议读者朋友能够不用看这个网站,按照个人方法走一遍便可。我本身的我的网站( https://wenqixiang.com )和本站( https://linuxstory.org )都是按此方法配置,如下以本网站域名( linuxstory.org )举例。
假定运行环境:Debian 8.0 64 位(本教程一样适用于 Debian 、 Ubuntu 、 CentOS 、 Arch Linux 、), Web 服务器是 Nginx 1.10 ,当前工做目录为 /home/linuxstory 家目录。若是是从零开始配置服务器,推荐使用 Debian 8 + lnmp 做为网站环境。
一、获取 Certbot 客户端
1 2 3 |
wget https://dl.eff.org/certbot-auto chmod a+x ./certbot-auto ./certbot-auto --help |
二、配置 nginx 、验证域名全部权
在虚拟主机配置文件( /usr/local/nginx/conf/vhost/linuxstory.org.conf )中添加以下内容,这一步是为了经过 Let’s Encrypt 的验证,验证 linuxstory.org 这个域名是属于个人管理之下。(具体解释可见下一章“一些补充说明”的“ certbot 的两种工做方式”)
1 2 3 4 5 6 7 8 |
location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; root /home/wwwroot/linuxstory.org/; }
location = /.well-known/acme-challenge/ { return 404; } |
三、重载 nginx
配置好 Nginx 配置文件,重载使修改生效(若是是其余系统 nginx 重载方法可能不一样)
1 |
sudo nginx -s reload |
四、生成证书
1 |
./certbot-auto certonly --webroot -w /home/wwwroot/linuxstory.org -d linuxstory.org |
中间会有一些自动运行及安装的软件,不用管,让其自动运行就好,有一步要求输入邮箱地址的提示,照着输入本身的邮箱便可,顺利完成的话,屏幕上会有提示信息。
此处有坑!若是顺利执行请直接跳到第五步,我在本身的服务器上执行屡次都提示
1 |
connection :: The server could not connect to the client for DV :: DNS query timed out |
发现问题出在 DNS 服务器上,我用的是 DNSpod ,没法经过验证,最后是将域名的 DNS 服务器临时换成 Godaddy 的才解决问题,经过验证,而后再换回原来的 DNSpod 。
证书生成成功后,会有 Congratulations 的提示,并告诉咱们证书放在 /etc/letsencrypt/live 这个位置
1 2 3 4 5 |
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/linuxstory.org/fullchain.pem. Your cert will expire on 2017-02-011. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. |
五、配置 Nginx(修改 /usr/local/nginx/conf/vhost/linuxstory.org.conf),使用 SSL 证书
1 2 3 4 5 6 7 |
listen 443 ssl; server_name linuxstory.org www.linuxstory.org; index index.html index.htm index.php; root /home/wwwroot/linuxstory.org; ssl_certificate /etc/letsencrypt/live/linuxstory.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/linuxstory.org/privkey.pem; |
上面那一段是配置了 https 的访问,咱们再添加一段 http 的自动访问跳转,将全部经过 http://www.linuxstory.org 的访问请求自动重定向到 https://linuxstory.org
1 2 3 4 5 |
server { listen 80; server_name linuxstory.org www.linuxstory.org; return 301 https://$server_name$request_uri; } |
六、重载 nginx,大功告成,此时打开网站就能够显示绿色小锁了
1 |
sudo nginx -s reload |
出于安全策略, Let’s Encrypt 签发的证书有效期只有 90 天,因此须要每隔三个月就要更新一次安全证书,虽然有点麻烦,可是为了网络安全,这是值得的也是应该的。好在 Certbot 也提供了很方便的更新方法。
一、测试一下更新,这一步没有在真的更新,只是在调用 Certbot 进行测试
1 |
./certbot-auto renew --dry-run |
若是出现相似的结果,就说明测试成功了(总之有 Congratulations 的字眼)
1 2 3 4 |
Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/linuxstory.org/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) |
二、手动更新的方法
1 |
./certbot-auto renew -v |
三、自动更新的方法
1 |
./certbot-auto renew --quiet --no-self-upgrade |
一、certbot-auto 和 certbot
certbot-auto 和 certbot 本质上是彻底同样的;不一样之处在于运行 certbot-auto 会自动安装它本身所须要的一些依赖,而且自动更新客户端工具。所以在你使用 certbot-auto 状况下,只需运行在当前目录执行便可
1 |
./certbot-auto |
二、certbot的两种工做方式
certbot (其实是 certbot-auto ) 有两种方式生成证书:
本文用的是 webroot 方式,也只推荐 webroot 方式,这也是前文第二步验证域名全部权在 nginx 虚拟主机配置文件中添加 location 段落内容的缘由。
本文连接: https://linuxstory.org/deploy-lets-encrypt-ssl-certificate-with-certbot
LinuxStory 原创教程,转载请注明出处,不然必究相关责任。