部署 Let's Encrypt 爬坑记

hsl4125 · 2019年06月27日 · 最后由 hsl4125 回复于 2019年07月04日 · 1792 次阅读

Let's Encryptp 爬坑记

个人主页域名申请下来了,下一步就是开启https。决定用Let's Encryptp ,据说既简单又安全,没想到都是眼泪,于是就有了这篇爬坑记。

打开Let's Encrypt官网,跟着Get Started就到了certbot。乍一看很人性化,什么nginx,ubuntu18.04 剩下的事情就是跟着步骤一路copy paste和Enter了吧。接下来就发现自己还是太傻太天真了。先选择的是default步骤,报错一看大致意思是DNS provider这边被拒绝了。还有个wildcard方式啊,也发现了linode支持在列。又是一通鼓捣,结果在安装DNS provider插件的时候坑了。通过apt-get安装没有python3-certbot-dns-linode这个包。想了一下直接通过pip安装:pip install cert-dns-linode。安装成功,开心的进行下一步。又坑了,报错大致上提示linode这个插件是0.35.1然后我其它的组件都是0.31.0的版本,版本不兼容!google上查了一下,有个和我一样情况的帖子得到了官方人员的回复:大致意思是说ubuntu的源不是他们官方维护的人家无能为力,并给推荐了一种通用的方式Running with Docker。此时我心中有一万头草泥马在崩腾。官方网站上详细描述了安装步骤,出了问题之后轻描淡写的把这个锅甩给了ubuntu。我就想弄个ssl证书,你跟我扯上Docker了。除了“干得漂亮”还能说什么。

吐槽无用,想一下怎么解决吧。cerbot提供的功能无非就是申请好证书,然后再配置nginx(apache)之类的服务器,把这些繁琐的工作工具化。捷径走不通那就一步步的通过源码来解决问题吧。这次终于成功了。先说一下前提,我的服务器是ubuntu 18.04 LTS(在linoe上),nginx是通过apt-get 安装的,事先也需要安装好git,并把你的源更新到最新:sudo apt update && sudo apt upgrade。

接下来说一下用certbot生成证书步骤(使用时请将example.com替换成自己的域名):

git clone https://github.com/certbot/certbot /opt/letsencrypt

cd /opt/letsencrypt

  • 运行letsencrypt-auto脚本(进行这一步之前先停止nginx或apache服务器,否则会提示你80或443端口被占用):

sudo -H ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com

  • 接下来一通Enter即可。

  • 此时你网站的域名应该有了,验证一下:

sudo ls /etc/letsencrypt/live

example.com
  • 生成证书:

./certbot-auto certificates

Found the following certs: Certificate Name: example.com Domains: example.com www.example.com Expiry Date: 2019-09-27 20:49:02+00:00 (VALID: 89 days) Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem

  • Let's Encryptp证书有效期为90天,这一步搞定自动续期:

./letsencrypt-auto renew

sudo crontab -e

0 0 1 * * /opt/letsencrypt/letsencrypt-auto renew
  • 同理如果你想自动更新cerbot repository:

sudo crontab -e

0 0 1 * * cd /opt/letsencrypt && git pull

至此证书的生成就完成了,有了证书配置nginx就简单许多了,接下来说一下nginx配置步骤(可以参考Configuring HTTPS servers ):

  • 告诉你的server哪有证书(/etc/nginx/sites-enabled/example.conf):
server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ...
}
  • http server 优化配置(/etc/nginx/nginx.conf)
http {
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    ...
  • 重启nginx,享受https带来的快乐:

sudo systemctl restart nginx

最后还可以去SSL Server Test验证一下SSL是否已经生效了。

原文在博客,刚刚弄好的主页,有点丑,大家凑合看。web开发我还是个小白,这个项目用来练手,现在github上还只是个private repository。还在持续改进中,过些天会开放出来。

共收到 11 条回复

是什么让你不去用大名鼎鼎的acme.sh的呢……

是什么让你不取用超级方便的dokku letsencrypt

acme.sh 可以使用dns 级别的验证 生成wildcard 的证书

acme.sh 已经支持了 ali_dns 了

letsencrypt 现在支持统配证书了,试一试这个repo,能省不少时间

https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

msg7086 回复

Let's Encryptp默认引导到certbot,就没用别的

@pynix @lazybios @jicheng1014 请看我的前提:

我的服务器是ubuntu 18.04 LTS(在linoe上),nginx是通过apt-get 安装的 .......

那么为什么不使用 caddy 一键申请证书呢

hsl4125 回复

不影响啊

hsl4125 回复

统配符证书跟你用什么系统、服务器没有任何关系,是通过域名解析新增cname验证的。

我印象中Lets Encrypt没有那么多坑啊,很快就弄完了

levi0214 回复

可能是环境不同导致的吧

hsl4125 关闭了讨论 07月04日 15:58
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册