美文网首页
Certobot管理Let's Encrypt证书的几个

Certobot管理Let's Encrypt证书的几个

作者: 虞大胆的叽叽喳喳 | 来源:发表于2018-08-25 19:46 被阅读814次

    很多人经常在使用 Certbot 申请 Let's Encrypt 证书的时候,犯一些小错误,或者不知道如何正确操作,这篇文章简单总结下我的一些经验,后续如果还有一些新的收获,还会随时介绍。
    废话少说,下面列举下我的一些小经验。

    1:设置邮箱接收证书过期的通知

    在使用 certbot 的时候,很多人没有意识到 account 的创建,每个 account 对应一个 email 地址,可以通过下列命令修改 account 对应的 email 地址。

    $ certbot-auto register --update-registration --email admin@example.com
    

    那配置 email 的用处是什么呢?一张 Let's Encrypt 证书有效期是 90 天,有效期太短,很多人忘记续期,Let's Encrypt 会在证书快过期的时候,给 email 地址发送证书快过期的通知。

    2:使用 certbot 还是 certbot-auto?

    certbot 和 certbot-auto 本质上没有区别,但很多人疑惑两者的区别,certbot-auto 对 certbot 做了包装,可以设置系统环境或自动升级。

    我个人更喜欢 certbot-auto 的安装方式:

    $ wget https://dl.eff.org/certbot-auto
    $ chmod a+x ./certbot-auto
    

    而如果使用包安装方式,安装的是 certbot 工具。

    $ apt-get install certbot 
    

    3:不要 rm 删除证书

    由于 Let's Encrypt 证书可以通过工具自由申请,很多人会无节制的操作,从而出现了很多无用证书,很多操作者不知道如何处理这些旧证书,就轻易的 rm 删除。

    这是非常不好的一个习惯,因为一些证书如果没有到期,被攻击者利用了就比较麻烦,正确处理无用证书的方式如下。

    先查看目前机器上申请过的证书:

    $ certbot-auto certificates
    

    输出如下:

    Found the following certs:
      Certificate Name: simplehttps.com
        Domains: *.simplehttps.com
        Expiry Date: 2018-10-15 05:21:15+00:00 (VALID: 52 days)
        Certificate Path: /etc/letsencrypt/live/simplehttps.com/fullchain.pem
        Private Key Path: /etc/letsencrypt/live/simplehttps.com/privkey.pem
      Certificate Name: yudadan.com
        Domains: *.yudadan.com *.simplehttps.com
        Expiry Date: 2018-10-15 04:52:47+00:00 (VALID: 52 days)
        Certificate Path: /etc/letsencrypt/live/yudadan.com/fullchain.pem
        Private Key Path: /etc/letsencrypt/live/yudadan.com/privkey.pem
    

    然后吊销证书,相当于通知 Let's Encrypt,该证书已经无效了。

    $ certbot-auto revoke --cert-path /etc/letsencrypt/live/yudadan.com/cert.pem --reason superseded 
    

    -- reason 表示是吊销证书的原因,命令运行成功后,/etc/letsencrypt/renewal、/etc/letsencrypt/archive、/etc/letsencrypt/live 下对应的文件都会被删除。

    4:你喜欢采用那种域名校验方式

    Let's Encrypt 提供了很多插件,能够满足各种场景下的证书管理,对于个人网站来说,可能只有一台 Web 服务器,在这台机器上申请、续期证书,然后 Web 服务器直接引用证书即可,非常的方便。

    对于大型企业来说,服务器非常多,Web 服务器、7层负载均衡设备都需要部署证书,一般会专门找一台机器(中控机)运行 Certbot,一旦更新证书,就通过各种方式(最简单的可能就是 rsync)将证书和密钥对分发到目标服务器上。

    在申请证书的时候,Let's Encrypt 会校验申请者的身份,也就是要确认域名的所有权,主要有三种方式,分别是 http-01、tls-sni-01、dns-01,如果由中控机统一管理证书,建议采用 dns-01 的验证方式。

    在中控机上运行 Certbot,一般情况下无法绑定域名到这台机器上,而 http-01、tls-sni-01 需要启动 web 服务,所以理论上来看,这两种校验方式无法使用。唯一的校验方式就是 dns-01,其实这也是最简单、最直接的方式,如果不想手动配置域名 DNS 解析记录,可以采用一些插件或一些 hook 来自动处理。

    5:使用 staging 服务器

    申请 Let's Encrypt 证书都是工具化的,为了防止滥用,Let's Encrypt 对申请证书做了一定的数量限制。

    如果操作不熟练,很容易陷入限制,为避免产生这种情况,可以采取两种方式。

    (1)--test-cert

    在测试 Certbot 的时候,输入该参数,表示向 staging 服务器发送请求,staging 服务器的限制阀值比较大,不会影响证书申请。

    等熟练掌握 Certbot 操作后,再向真实服务器发送请求。

    (2)--dry-run

    当使用 renew 或 certonly 操作 Certbot 的时候,加入该参数,不会真正保存证书到本地,也就是说不会陷入限制,这对测试 Certbot 操作非常有用。

    6:不要轻易修改 renewal 文件。

    在 Certbot 中,所有的证书管理操作都保存在 renewal 文件中,该文件相当于索引,用户管理证书,打开 /etc/letsencrypt/renewal/simplehttps.com.conf 文件,内容如下图:

    图1

    archive_dir 等配置指向一个软连接,指向了实际的证书。renewalparams 参数存储了很多申请证书时用到的配置,比如 server 表示 Let's Encrypt 的服务器地址(v2版本),采用了 manual(手动)插件,使用 dns-01 域名验证方式,manual_auth_hook 表示采用的 hook 文件。

    这个文件对 Certbot 至关重要,比如 renew 证书的时候会用到,一般情况下不要手动修改,如果 archive 目录下证书文件移动了,可以修改相关连接参数,然后运行下列命令,重置 renewal 文件。

    $ certbot-auto update_symlinks
    

    7:authenticators 插件和 installers 插件别混淆。

    在 Certbot 中,存在两种类型的插件,可在运行具体命令参数的时候,很多人会混淆。

    下面两条命令作用是相同的:

    $ certbot-auto
    $ certbot-auto run install 
    

    其中 run 表示申请证书,install 表示采用 installers 插件。

    下面两条命令是相同的:

    $ certbot-auto  certonly  
    $ certbot-auto run certonly
    

    表示采用 authenticators 插件。

    在我刚开始学习的时候,总是搞不清楚相关命令行参数,现在明白了吗?

    我最近写了一本书《深入浅出HTTPS:从原理到实战》,欢迎去各大电商购买,也欢迎关注我的公众号(yudadanwx,虞大胆的叽叽喳喳),了解我最新的博文。

    相关文章

      网友评论

          本文标题:Certobot管理Let's Encrypt证书的几个

          本文链接:https://www.haomeiwen.com/subject/lwggiftx.html