2017 年 6 月 15 日申请 Let's Encrypt 免费的 ssl 攻略,之前的攻略都可以扔了。

2017-06-15 22:31:12 +08:00
 uuair

为什么说以前的都可以扔了呢?因为我走了很多很多弯路,然后还不相信官方的话,虽然还有问题无法解决,但我已经做到 A+了。

好了,开始干活,我的系统环境是 ubuntu17.4+nginx+ghost 博客

首先要知道,申请 Let's Encrypt 的方法,官方有一个自动获得软件,叫 Certbot,它的官网有使用方法,一定要看这个!!!!虽然他还有不完善的地方,不过我会改掉的!

cerbot 官网

按照官方网站里面选择的 ningx 以及 ubuntu17.4 的安装方法运行吧:

$ sudo apt-get install software-properties-common  
$ sudo add-apt-repository ppa:certbot/certbot  
$ sudo apt-get update  
$ sudo apt-get install python-certbot-nginx   

看,上面最后一步其实已经跟很多教程不同了,对吧!

下一步再按照官网运行:

certbot --nginx  

好了,上面这部需要 sudo 或者 sudo su 来运行,这个不算毛病。

第一步输入一个邮箱,以后可以找回你失去的东西,然后选择域名。

接下来就好玩了,因为这个软件,已经配置好了 nginx,按照其他教程,后面还要弄关于 nginx 的问题,还有什么验证问题,但现在,都不用干了,因为都好了!!

软件生成的文件/etc/letsencrypt/options-ssl-nginx.conf<--------看好了这个文件,里面的内容是这样的:

ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";

仔细看看,已经包括很多教程的内容了,甚至更多! 所以不要学教程,在 nginx 的配置文件当中添加这些内容,会出错的!

所以下一步是修改,因为这时候进入测试网站:https://myssl.com 看到的结果是 B 级。

here we go!

根据这里: https://weakdh.org/sysadmin.html 指出的问题,Diffie-Hellman for TLS 有问题,certbot 是没有设置的,所以需要手动来一波。

我是这样的,进入 /etc/letsencrypt/live/你的域名 /
这里存着生成的各种 pem 以及证书,就在这里吧:

openssl dhparam -out dhparams.pem 2048  

等啊等啊,然后生成 dhparams.pem 了,这下进入 ningx 的目录,找到网站的.conf 文件,你看,文件里面已经被改的五花八门了吧,这就是 certbot 生成的,在这些文件下面添加:

ssl_dhparam /etc/letsencrypt/live/你的域名 /dhparams.pem;

然后,我是说然后又来了,上面这些只能让你的网站到 A,下面还有一个,开启全局 https,或者说设置 HSTS,再楼上那个文件下面继续添加:

 #HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)  
 add_header Strict-Transport-Security max-age=15768000;

保存吧,然后无论是systemctl restart nginx还是sudo nginx -s reload都可以开启 ssl,虽然虽然,并不完美!

最后来一步我用不知道对错的自动更新,我实在 root 下运行的:

crontab -e  
0 3 * * 2,4,6 certbot renew -q --pre-hook "service nginx start" --post-hook "service nginx restart"

上面这个对不对,我没法测试啊,理论上是可以的吧。。

7676 次点击
所在节点    SSL
60 条回复
SourceMan
2017-06-15 22:33:23 +08:00
这么复杂,我都是一键申请和续签的,没有这么多步骤
uuair
2017-06-15 22:34:51 +08:00
@SourceMan 小伙子,要与时俱进啊。。。
gstqc
2017-06-15 22:36:57 +08:00
标题好牛逼,进来一看,纯粹标题党,正文养分约为零。
Clarke
2017-06-15 22:37:32 +08:00
mark 一下。
uuair
2017-06-15 22:38:14 +08:00
@gstqc 来来来,你说我是标题党,我搜到最新的配置指南事 2017 年 3 月份的,你看看跟我说的一样不?
在网站的 conf 里面,添加了过多的东西,然后无法启动 nginx。
bkmi
2017-06-15 22:40:27 +08:00
flaneurse
2017-06-15 22:40:42 +08:00
正好再过一个月要续了,先记下来
fudanglp
2017-06-15 22:42:05 +08:00
acme 好像更流行一点
gstqc
2017-06-15 22:45:55 +08:00
@uuair 1. 申请方法有非常多的文章,要了解的看下 acme 协议
2. 要自动化签发的,看下 acme.sh 这个脚本,各种验证方法和自动续签
3. Nginx 无法启动,跟申请证书一点关系都没
4. 评价 A+, 和证书没有一点关系,反正最低只能申请 RSA 2048 的证书。只和你的 Web server 配置有关。
ershiwo
2017-06-15 22:48:03 +08:00
签发用自动化工具,安全性配置按 Mozilla 推荐的抄,A+ 没什么难的吧。两年前的东西照样用,基本流程又没有什么大变化。
lightening
2017-06-15 22:48:29 +08:00
最简单的办法大概是用 Caddy 这个直接支持 LE 的 web server 吧……
uuair
2017-06-15 22:49:02 +08:00
@gstqc 好吧,我明白了,你根本没看我写的。。哈哈,反正我也是给自己记录一下,而且方便跟我一样不懂的人走弯路,你的话我可以忽略啦。
sundong
2017-06-15 22:49:53 +08:00
阿里云 方便+ 简单+免费
https://ooo.0o0.ooo/2017/06/15/59429e75879e0.png
gstqc
2017-06-15 22:50:57 +08:00
@uuair no,是你没看明白我回复的 4 点内容。
DearTanker
2017-06-15 22:53:32 +08:00
感谢分享。
zuolan
2017-06-15 22:55:45 +08:00
自己写了个 Docker 镜像,只需要一条命令,全自动运行,真正一键搞定,管你什么服务器什么配置。。。。( Docker Hub 一堆这种镜像,我就不给自己打广告了)
Kilerd
2017-06-15 23:00:38 +08:00
嗯,你居然不用 acme.sh

你这个也可以扔了。(滑稽
GoldenPillow
2017-06-15 23:06:53 +08:00
支持分享,不过撸主没有做好科技查新工作啊,acme.sh 非常方便
neilp
2017-06-15 23:08:03 +08:00
我是被标题吓到,然后进来的
zpf124
2017-06-15 23:23:48 +08:00
同 A+ 的路过,达到这个级别 配置很简单.

我之前的配置照着这几个网址弄的,当时这个工具还不支持直接 nginx 启动。

Let's Encrypt 工具网站
https://certbot.eff.org/#debianwheezy-nginx

mozilla 的服务器配置生成器,
https://mozilla.github.io/server-side-tls/ssl-config-generator/

用这个生成 Modern 级别的配置 在再生成一下 dhparams.pem 就直接是 A+了。



另外楼主 你的定时计划命令 应该不要那两个 hook。 根据工具的文档,应该可以不用停止 nginx。它的文档里写的是“更新命令会使用和注册相同的参数除非你手动修改”。
之前需要些 hook 是因为当时使用的是 standalone 插件,这个插件需要使用 80/443 端口来让他自己成为 web 服务器从而可以让 Let's Encrypt 的服务器可以验证你拥有这个域名,所以需要关闭掉真正监听这两个端口的服务器软件。 而现在有了支持 nginx 的插件,应该可以不用关闭 nginx 服务了。

官方文档里 给 debian7 写的文档里是 直接将 certbot-auto renew --no-self-upgrade 加入 定时计划。我想 Ubuntu 也类似。

// 不过 这个得 你自己验证一下了,我现在是用 acme.sh ...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/368732

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX