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"

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

7696 次点击
所在节点    SSL
60 条回复
zpf124
2017-06-15 23:26:12 +08:00
@ershiwo 确实简单, 用 mozilla 的生成器生成一个激进的不然兼容那 0.x%的老软件的配置,再生成以下 dhparams 就直接 A+了。
uuair
2017-06-15 23:30:21 +08:00
@zpf124 是啊是啊,我也没发验证,但是那个不是重启,而是不要让 nginx 关闭的意思。
zpf124
2017-06-15 23:39:56 +08:00
@uuair 讲真 确实非常简单,你的文章也没有涉及深入的部分,只有三条命令的使用... 确实有点水....

nginx 起不来 确实是你配置有问题, 涉及 https 的配置主要就 4 项 ,不算过多。

ssl_certificate 证书
ssl_certificate_key 私钥
ssl_protocols 支持的安全通讯协议 (为了安全就是 TLS1.2,兼容就 TLSv1 TLSv1.1 TLSv1.2)
ssl_ciphers 支持的加密算法 (这个可能长了点,但算法就那么些,网上搜这个属性能搜出一大堆配置)
zpf124
2017-06-15 23:46:21 +08:00
@Clarke
@flaneurse

就像楼上其他人说的 现在好像 acme.sh 更流行一点,而且工具更小更简单...
https://github.com/Neilpang/acme.sh 这个项目的 wiki 里就有教程
或者也可以看这个 https://ruby-china.org/topics/31983

至于 nginx 的配置 直接用 mozilla 那个生成就很好。
zpf124
2017-06-15 23:52:10 +08:00
@uuair 你根本没看懂文档, 那两个 hook 实现的功能是

当工具开始处理之前 执行 --pre-hook 之后处理续签 等续签完成后 触发 --post-hook

整个命令的意思就是 当 certbot renew 运行前,停止 nginx, 当 certbot renew 运行结束后 再启动 nginx。

这个命令 是为了 以前的 standalone 插件设计的, 因为这个插件 要用 web 端口。
Clarke
2017-06-16 00:04:08 +08:00
@zpf124,好的,哪个简单我就用哪个。
zpf124
2017-06-16 00:07:00 +08:00



基本都是 mozilla 默认生成的,添了个 ssl_dhparam,注释了 ssl_trusted_certificate,完事 。A+~~~
wangxiaodong
2017-06-16 00:11:02 +08:00
@uuair

阻碍网站成为 A+的关键点主要是 Web Server 的相关设置,跟 https 证书签发不太相关。

tls/https 证书不管通过什么方式签署下来的,理论上大多数就符合 A+,比如我网站 https://congci.com 就是用自行编程方式来申请证书的。

在这里给大家推荐一个 go 语言版本的证书申请开源项目 - https://github.com/xenolf/lego

签发 go 代码 - certificates, failures := client.ObtainCertificate([]string{"mydomain.com"}, bundle, nil, false)
SourceMan
2017-06-16 00:15:14 +08:00
我都懒得回复了,楼上正解
chanssl
2017-06-16 00:33:10 +08:00
acme.sh 用着挺好挺方便。
ahu
2017-06-16 01:16:14 +08:00
不管怎么说,这篇文章价值还是很大。让我了解到了 certbot 和 acme.sh 的更新,尤其是 caddy server
顺带又知道了好多相关项目,例如 Gogs
heimeil
2017-06-16 01:58:14 +08:00
最简单的 Caddy,两句配置 HTTPS 和 HTTP2 都有了,还是自动续订 Let's Encrypt 证书的。
ryd994
2017-06-16 03:01:31 +08:00
你知不知道,Nginx 可以 include ?
sxyuqiao
2017-06-16 04:28:41 +08:00
28 楼正解 来 V2 发教程之前还是多学习学习吧
xfspace
2017-06-16 08:48:51 +08:00
我进不去`ningx`目录啊。怎么生成`dhparams.pem`?
nfroot
2017-06-16 09:24:38 +08:00
大家看这里,
大家看这里,
大家看这里,
大家看这里,
楼主说的 ningx 到底是什么软件???

说什么之前的攻略都可以扔了,也太目中无人了吧,又不是全世界只有 ubuntu17.4+nginx 一种搭配。你的攻略都不通用,还想跟别人比肩。
楼上说得对,你就一标题党。还跟我们说 ningx,你倒是给我解释一下,多处出现 ningx 是几个意思?

虽然说你是分享应该感谢没错,但是也稍微注意一下用词吧,还有别搞错别字。谢谢
yuanchao
2017-06-16 09:37:22 +08:00
有一种那个感觉
yuanchao
2017-06-16 09:37:59 +08:00
有一种那个感觉


你们都让开,不是我针对谁,我是说在坐各位都是垃圾
7654
2017-06-16 10:00:26 +08:00
同推荐 acme.sh 脚本一键运行
lele140
2017-06-16 10:00:46 +08:00
同样推荐 https://acme.sh

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

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

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

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

© 2021 V2EX