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

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

  •  
  •   uuair 2017-06-15 22:31:12 +08:00 8200 次点击
    这是一个创建于 3040 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么说以前的都可以扔了呢?因为我走了很多很多弯路,然后还不相信官方的话,虽然还有问题无法解决,但我已经做到 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" 

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

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

    你这个也可以扔了。(滑稽
    GoldenPillow
        18
    GoldenPillow  
       2017-06-15 23:06:53 +08:00 via iPhone
    支持分享,不过撸主没有做好科技查新工作啊,acme.sh 非常方便
    neilp
        19
    neilp  
       2017-06-15 23:08:03 +08:00 via iPhone
    我是被标题吓到,然后进来的
    zpf124
        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 ...
    zpf124
        21
    zpf124  
       2017-06-15 23:26:12 +08:00
    @ershiwo 确实简单, 用 mozilla 的生成器生成一个激进的不然兼容那 0.x%的老软件的配置,再生成以下 dhparams 就直接 A+了。
    uuair
        22
    uuair  
    OP
       2017-06-15 23:30:21 +08:00
    @zpf124 是啊是啊,我也没发验证,但是那个不是重启,而是不要让 nginx 关闭的意思。
    zpf124
        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 支持的加密算法 (这个可能长了点,但算法就那么些,网上搜这个属性能搜出一大堆配置)
    zpf124
        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 那个生成就很好。
    zpf124
        25
    zpf124  
       2017-06-15 23:52:10 +08:00
    @uuair 你根本没看懂文档, 那两个 hook 实现的功能是

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

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

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



    基本都是 mozilla 默认生成的,添了个 ssl_dhparam,注释了 ssl_trusted_certificate,完事 。A+~~~
    wangxiaodong
        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)
    SourceMan
        29
    SourceMan  
       2017-06-16 00:15:14 +08:00 via iPhone
    我都懒得回复了,楼上正解
    chanssl
        30
    chanssl  
       2017-06-16 00:33:10 +08:00
    acme.sh 用着挺好挺方便。
    ahu
        31
    ahu  
       2017-06-16 01:16:14 +08:00
    不管怎么说,这篇文章价值还是很大。让我了解到了 certbot 和 acme.sh 的更新,尤其是 caddy server
    顺带又知道了好多相关项目,例如 Gogs
    heimeil
        32
    heimeil  
       2017-06-16 01:58:14 +08:00 via Android
    最简单的 Caddy,两句配置 HTTPS 和 HTTP2 都有了,还是自动续订 Let's Encrypt 证书的。
    ryd994
        33
    ryd994  
       2017-06-16 03:01:31 +08:00 via Android
    你知不知道,Nginx 可以 include ?
    sxyuqiao
        34
    sxyuqiao  
       2017-06-16 04:28:41 +08:00 via iPhone
    28 楼正解 来 V2 发教程之前还是多学习学习吧
    xfspace
        35
    xfspace  
       2017-06-16 08:48:51 +08:00 via Android
    我进不去`ningx`目录啊。怎么生成`dhparams.pem`?
    nfroot
        36
    nfroot  
       2017-06-16 09:24:38 +08:00
    大家看这里,
    大家看这里,
    大家看这里,
    大家看这里,
    楼主说的 ningx 到底是什么软件???

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

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


    你们都让开,不是我针对谁,我是说在坐各位都是垃圾
    7654
        39
    7654  
       2017-06-16 10:00:26 +08:00
    同推荐 acme.sh 脚本一键运行
    lele140
        40
    lele140  
       2017-06-16 10:00:46 +08:00
    同样推荐 https://acme.sh
    mokeyjay
        41
    mokeyjay  
       2017-06-16 10:05:29 +08:00   3
    不是很懂你这种自信心爆棚的家伙
    mritd
        42
    mritd  
       2017-06-16 10:12:45 +08:00 via iPhone
    @ershiwo 完全正确
    jianleer
        43
    jianleer  
       2017-06-16 10:16:48 +08:00
    感谢楼主,A+ 了
    momocraft
        44
    momocraft  
       2017-06-16 10:19:18 +08:00
    考虑过为什么自己走了那么多弯路吗 :doge:
    abclearner
        45
    abclearner  
       2017-06-16 10:21:02 +08:00
    看得雨里雾里的 我一技术小白 照着 DO 上的一篇攻略 弄完就 A+了
    那个日期是干什么的?
    ppwangs
        46
    ppwangs  
       2017-06-16 10:43:08 +08:00
    sunber
        47
    sunber  
       2017-06-16 11:39:22 +08:00
    感觉比我之前申请的 startssl 麻烦多了
    lsido
        48
    lsido  
       2017-06-16 12:48:25 +08:00 via Android
    哈哈哈哈,我居然看完了各种喷
    4679kun
        49
    4679kun  
       2017-06-16 13:05:26 +08:00 via Android
    A+太简单了 来玩这个
    myliyifei
        50
    myliyifei  
       2017-06-16 13:05:34 +08:00 via Android
    非 443 端口没法用 很蛋疼
    yangxuan8282
        51
    yangxuan8282  
       2017-06-16 15:06:09 +08:00
    申请证书自动化工具有官方的工具 certbot,脚本有 acme.sh,用 docker 的话有 neilpang/nginx-proxy 和 blackglory/caddy-proxy,如果非说手动申请更先进的话总得说出点理由吧
    Zohar
        52
    Zohar  
       2017-06-16 15:37:50 +08:00 via Android   1
    楼主成功地把一件很简单的事情给复杂化了→_→
    momocraft
        53
    momocraft  
       2017-06-16 15:39:33 +08:00
    @yangxuan8282 解决其他方法中不存在的问题,给人更大的成就感 →_→
    yangxuan8282
        54
    yangxuan8282  
       2017-06-16 15:43:19 +08:00
    @momocraft 确实,可能会有点类似网站备案成功的那种仪式感
    johnlui
        55
    johnlui  
       2017-06-16 18:20:16 +08:00
    A+ 并不是什么好事,虽然兼容性爆表,但是苹果 ATS 不认,而且支持的加密方式太多,除 MAC 端 Chrome 之外的其他浏览器有时候会报告很奇怪的问题,反而会影响真实用户的访问。
    Tink
        56
    Tink  
    PRO
       2017-06-16 19:39:32 +08:00 via iPhone
    这是啥意思
    litanid
        57
    litanid  
       2017-06-16 21:30:49 +08:00
    zingl
        58
    zingl  
       2017-06-16 22:40:57 +08:00
    前面套 HTTPS CDN,什么都不用,结束
    yytsjq
        59
    yytsjq  
       2017-06-16 22:53:26 +08:00
    Hardrain
        60
    Hardrain  
       2017-06-17 15:18:32 +08:00
    个人认为还是 acme.sh 更好用,特别是申请 ECDSA 证书的时候.

    Letsencrypt/Certbot 需要自己生成 CSR 而 acme.sh 不用
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2471 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 01:43 PVG 09:43 LAX 18:43 JFK 21:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86