为什么说以前的都可以扔了呢?因为我走了很多很多弯路,然后还不相信官方的话,虽然还有问题无法解决,但我已经做到 A+了。
好了,开始干活,我的系统环境是 ubuntu17.4+nginx+ghost 博客
首先要知道,申请 Let's Encrypt 的方法,官方有一个自动获得软件,叫 Certbot,它的官网有使用方法,一定要看这个!!!!虽然他还有不完善的地方,不过我会改掉的!
按照官方网站里面选择的 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"
上面这个对不对,我没法测试啊,理论上是可以的吧。。
1
SourceMan 2017-06-15 22:33:23 +08:00 via iPhone
这么复杂,我都是一键申请和续签的,没有这么多步骤
|
3
0ZXYDDu796nVCFxq 2017-06-15 22:36:57 +08:00 via iPhone 26
标题好牛逼,进来一看,纯粹标题党,正文养分约为零。
|
4
Clarke 2017-06-15 22:37:32 +08:00 via Android
mark 一下。
|
5
uuair OP @gstqc 来来来,你说我是标题党,我搜到最新的配置指南事 2017 年 3 月份的,你看看跟我说的一样不?
在网站的 conf 里面,添加了过多的东西,然后无法启动 nginx。 |
6
bkmi 2017-06-15 22:40:27 +08:00 1
|
7
flaneurse 2017-06-15 22:40:42 +08:00 via Android
正好再过一个月要续了,先记下来
|
8
fudanglp 2017-06-15 22:42:05 +08:00
acme 好像更流行一点
|
9
0ZXYDDu796nVCFxq 2017-06-15 22:45:55 +08:00 via iPhone 2
|
10
ershiwo 2017-06-15 22:48:03 +08:00
签发用自动化工具,安全性配置按 Mozilla 推荐的抄,A+ 没什么难的吧。两年前的东西照样用,基本流程又没有什么大变化。
|
11
lightening 2017-06-15 22:48:29 +08:00
最简单的办法大概是用 Caddy 这个直接支持 LE 的 web server 吧……
|
12
uuair OP @gstqc 好吧,我明白了,你根本没看我写的。。哈哈,反正我也是给自己记录一下,而且方便跟我一样不懂的人走弯路,你的话我可以忽略啦。
|
13
sundong 2017-06-15 22:49:53 +08:00
阿里云 方便+ 简单+免费
https://ooo.0o0.ooo/2017/06/15/59429e75879e0.png |
14
0ZXYDDu796nVCFxq 2017-06-15 22:50:57 +08:00 via iPhone
@uuair no,是你没看明白我回复的 4 点内容。
|
15
DearTanker 2017-06-15 22:53:32 +08:00
感谢分享。
|
16
zuolan 2017-06-15 22:55:45 +08:00
自己写了个 Docker 镜像,只需要一条命令,全自动运行,真正一键搞定,管你什么服务器什么配置。。。。( Docker Hub 一堆这种镜像,我就不给自己打广告了)
|
18
GoldenPillow 2017-06-15 23:06:53 +08:00 via iPhone
支持分享,不过撸主没有做好科技查新工作啊,acme.sh 非常方便
|
19
neilp 2017-06-15 23:08:03 +08:00 via iPhone
我是被标题吓到,然后进来的
|
20
zpf124 2017-06-15 23:23:48 +08:00 1
同 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 ... |
21
zpf124 2017-06-15 23:26:12 +08:00
@ershiwo 确实简单, 用 mozilla 的生成器生成一个激进的不然兼容那 0.x%的老软件的配置,再生成以下 dhparams 就直接 A+了。
|
23
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 支持的加密算法 (这个可能长了点,但算法就那么些,网上搜这个属性能搜出一大堆配置) |
24
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 那个生成就很好。 |
25
zpf124 2017-06-15 23:52:10 +08:00
@uuair 你根本没看懂文档, 那两个 hook 实现的功能是
当工具开始处理之前 执行 --pre-hook 之后处理续签 等续签完成后 触发 --post-hook 整个命令的意思就是 当 certbot renew 运行前,停止 nginx, 当 certbot renew 运行结束后 再启动 nginx。 这个命令 是为了 以前的 standalone 插件设计的, 因为这个插件 要用 web 端口。 |
27
zpf124 2017-06-16 00:07:00 +08:00
基本都是 mozilla 默认生成的,添了个 ssl_dhparam,注释了 ssl_trusted_certificate,完事 。A+~~~ |
28
wangxiaodong 2017-06-16 00:11:02 +08:00 1
@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) |
29
SourceMan 2017-06-16 00:15:14 +08:00 via iPhone
我都懒得回复了,楼上正解
|
31
ahu 2017-06-16 01:16:14 +08:00
不管怎么说,这篇文章价值还是很大。让我了解到了 certbot 和 acme.sh 的更新,尤其是 caddy server
顺带又知道了好多相关项目,例如 Gogs |
32
heimeil 2017-06-16 01:58:14 +08:00 via Android
最简单的 Caddy,两句配置 HTTPS 和 HTTP2 都有了,还是自动续订 Let's Encrypt 证书的。
|
33
ryd994 2017-06-16 03:01:31 +08:00 via Android
你知不知道,Nginx 可以 include ?
|
34
sxyuqiao 2017-06-16 04:28:41 +08:00 via iPhone
28 楼正解 来 V2 发教程之前还是多学习学习吧
|
35
xfspace 2017-06-16 08:48:51 +08:00 via Android
我进不去`ningx`目录啊。怎么生成`dhparams.pem`?
|
36
nfroot 2017-06-16 09:24:38 +08:00
大家看这里,
大家看这里, 大家看这里, 大家看这里, 楼主说的 ningx 到底是什么软件??? 说什么之前的攻略都可以扔了,也太目中无人了吧,又不是全世界只有 ubuntu17.4+nginx 一种搭配。你的攻略都不通用,还想跟别人比肩。 楼上说得对,你就一标题党。还跟我们说 ningx,你倒是给我解释一下,多处出现 ningx 是几个意思? 虽然说你是分享应该感谢没错,但是也稍微注意一下用词吧,还有别搞错别字。谢谢 |
37
yuanchao 2017-06-16 09:37:22 +08:00
有一种那个感觉
|
38
yuanchao 2017-06-16 09:37:59 +08:00
有一种那个感觉
你们都让开,不是我针对谁,我是说在坐各位都是垃圾 |
40
lele140 2017-06-16 10:00:46 +08:00
同样推荐 https://acme.sh
|
41
mokeyjay 2017-06-16 10:05:29 +08:00 3
不是很懂你这种自信心爆棚的家伙
|
43
jianleer 2017-06-16 10:16:48 +08:00
感谢楼主,A+ 了
|
44
momocraft 2017-06-16 10:19:18 +08:00
考虑过为什么自己走了那么多弯路吗 :doge:
|
45
abclearner 2017-06-16 10:21:02 +08:00
看得雨里雾里的 我一技术小白 照着 DO 上的一篇攻略 弄完就 A+了
那个日期是干什么的? |
46
ppwangs 2017-06-16 10:43:08 +08:00
|
47
sunber 2017-06-16 11:39:22 +08:00
感觉比我之前申请的 startssl 麻烦多了
|
48
lsido 2017-06-16 12:48:25 +08:00 via Android
哈哈哈哈,我居然看完了各种喷
|
49
4679kun 2017-06-16 13:05:26 +08:00 via Android
A+太简单了 来玩这个
|
50
myliyifei 2017-06-16 13:05:34 +08:00 via Android
非 443 端口没法用 很蛋疼
|
51
yangxuan8282 2017-06-16 15:06:09 +08:00
申请证书自动化工具有官方的工具 certbot,脚本有 acme.sh,用 docker 的话有 neilpang/nginx-proxy 和 blackglory/caddy-proxy,如果非说手动申请更先进的话总得说出点理由吧
|
52
Zohar 2017-06-16 15:37:50 +08:00 via Android 1
楼主成功地把一件很简单的事情给复杂化了→_→
|
53
momocraft 2017-06-16 15:39:33 +08:00
@yangxuan8282 解决其他方法中不存在的问题,给人更大的成就感 →_→
|
54
yangxuan8282 2017-06-16 15:43:19 +08:00
@momocraft 确实,可能会有点类似网站备案成功的那种仪式感
|
55
johnlui 2017-06-16 18:20:16 +08:00
A+ 并不是什么好事,虽然兼容性爆表,但是苹果 ATS 不认,而且支持的加密方式太多,除 MAC 端 Chrome 之外的其他浏览器有时候会报告很奇怪的问题,反而会影响真实用户的访问。
|
56
Tink 2017-06-16 19:39:32 +08:00 via iPhone
这是啥意思
|
57
litanid 2017-06-16 21:30:49 +08:00
|
58
zingl 2017-06-16 22:40:57 +08:00
前面套 HTTPS CDN,什么都不用,结束
|
59
yytsjq 2017-06-16 22:53:26 +08:00
|