ubuntu 18.04 Let is Encrypt单域名和泛域名SSL证书配置

一、Let’s Encrypt简介
  • Let’s Encrypt 也是一个 CA 机构,但这个 CA 机构是免费的!!!也就是说签发证书不需要任何费用。
  • Let’s Encrypt 由于是非盈利性的组织,需要控制开支,他们搞了一个非常有创意的事情,设计了一个 ACME 协议,目前该协议的版本是 v1。
  • 那为什么要创建 ACME 协议呢,传统的 CA 机构是人工受理证书申请、证书更新、证书撤销,完全是手动处理的。而 ACME 协议规范化了证书申请、更新、撤销等流程,只要一个客户端实现了该协议的功能,通过客户端就可以向 Let’s Encrypt 申请证书,也就是说 Let’s Encrypt CA 完全是自动化操作的
  • 通配符证书就是证书中可以包含一个通配符,比如 .example.com、.example.cn,支持多个子域名使用同一个证书
二、certbot验证方式
  • cerbot验证方式有下面几种:apache,nginx,webroot,standalone,dns plugins,manual
  • apache,nginx申请的证书只用自身服务的,我们选择通常生产有Standanlone 、Webroot,Manual,DNS Plugins
    ubuntu 18.04 Let is Encrypt单域名和泛域名SSL证书配置_第1张图片
  • Standalone 方式: certbot 会自己运行一个 web server 来进行验证,暂时占用服务器的 80 或者 443 端口。如果我们自己的服务器上已经有 web server 正在运行 (比如 Nginx 或 Apache ),用 standalone 方式的话需要先关掉它,以免冲突。
  • Webroot 方式: certbot 会利用既有的 web server,在其 web root目录下创建隐藏文件, Let’s Encrypt 服务端会通过域名来访问这些隐藏文件,以确认你的确拥有对应域名的控制权。
  • Manual:表示手动交互模式,Certbot 有很多插件,不同的插件都可以申请证书,用户可以根据需要自行选择
  • DNS Plugins:使用各类型的DNS插件证明这个域名是属于你的,自动验证方式创建泛域名证书,不是所有的域名都能用自动验证方式创建证书,需要查看官方支持域名供应商,如阿里云是没有提供API来自动验证
三、单域名
  • standalone
sudo certbot certonly --standalone -d www.domain.com
  • webroot
sudo certbot certonly --webroot -w /var/www/live -d www.domain.com \
    --agree-tos \
    --email [email protected]
  • manual方式
sudo certbot certonly --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --manual-public-ip-logging-ok  -d <www.your.domain> --agree-tos --email [email protected]
四、泛域名
  • Let’s Encrypt只支持DNS方式获取泛域名
sudo certbot certonly --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --manual-public-ip-logging-ok -d '*.' -d <your.domain> --agree-tos --email [email protected]
`certonly` 表示安装模式,Certbot 有安装模式和验证模式两种类型的插件。
--manual: 表示手动交互模式,Certbot 有很多插件,不同的插件都可以申请证书,用户可以根据需要自行选择
-d: 为那些主机申请证书,如果是通配符,输入 *.xxxx.com (可以替换为你自己的域名)
--preferred-challenges: 使用 DNS 方式校验域名所有权
--server:Let's Encrypt ACME v2 版本使用的服务器不同于 v1 版本,需要显示指定。
--agree-tos:默认同意 Let’s Encrypt 的一些 agreements,不加这个参数在命令执行过程中还是会问用户是否同意;
--email:用来获取一些 Let’s Encrypt 的通知,比如证书过期之类;

certonly:                       Obtain or renew a certificate, but do not install
–manual:                        Obtain certificates interactively
–preferred-challenges=dns:      Use dns to authenticate domain ownership
–server:                        Specify the endpoint to use to generate
–agree-tos:                     Agree to the ACME server’s subscriber terms
-d:                             Domain name to provide certificates for

ubuntu 18.04 Let is Encrypt单域名和泛域名SSL证书配置_第2张图片

  • DNS服务商配置TXT指向
    ubuntu 18.04 Let is Encrypt单域名和泛域名SSL证书配置_第3张图片
  • 检查DNS配置txt是否生效,dig -t txt _acme-challenge.htslqc0731.com
    ubuntu 18.04 Let is Encrypt单域名和泛域名SSL证书配置_第4张图片
  • 确定继续生成
    ubuntu 18.04 Let is Encrypt单域名和泛域名SSL证书配置_第5张图片
  • 创建成功 /etc/letsencrypt/live/example.com/下会生成五个文件
cert.pem  - Apache服务器端证书  
chain.pem  - Apache根证书和中继证书  
fullchain.pem  - Nginx所需要ssl_certificate文件  
privkey.pem - 安全证书KEY文件
README - 参数说明
Nginx环境,就只需要用到fullchain.pem和privkey.pem两个证书文件
五、删除域名证书
sudo certbot delete --cert-name example.com    # 删具体域名
sudo certbot delete     # 手动列表选择删除域名
jtserver@tlwlmy:~$ sudo certbot delete
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Which certificate(s) would you like to delete?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: www.domain1.com
2: www.domain2.com
3: www.mydomain.com
4: www.domain3.com
5: www.domain4.com
6: www.domain5.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 3

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Deleted all files relating to certificate www.mydomain.com.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • 当删除域名时候,检查一下目录域名是否删除
/etc/letsencrypt/archive
/etc/letsencrypt/live
/etc/letsencrypt/renewal
  • Wildcard certificates can only be attained using DNS validation. This is a policy decision by Let’s Encrypt.
六、证书满90天后续期
  • 自动更新ssl key脚本
#!/bin/bash

# Directory where the acme client puts the generated certs
LETSENCRYPT_CERT_OUTPUT=/etc/letsencrypt/live

# Create or renew certificate for the domain(s) supplied for this tool
certbot renew --dry-run --pre-hook "service nginx start" --post-hook "service nginx stop"

# Cat the certificate chain and the private key together for haproxy
# for path in $(find $LETSENCRYPT_CERT_OUTPUT/* -type d -exec basename {} \;); do
  # cat $LETSENCRYPT_CERT_OUTPUT/$path/{fullchain.pem,privkey.pem} > /etc/haproxy/ssl/${path}.pem
for path in $(ls -d $LETSENCRYPT_CERT_OUTPUT/* | grep -o -P "[\w\.-]*$" | grep -v "README"); do
  cat $LETSENCRYPT_CERT_OUTPUT/$path/fullchain.pem $LETSENCRYPT_CERT_OUTPUT/$path/privkey.pem > /etc/haproxy/ssl/${path}.pem
done
  • root用户crontab设置定时任务更新,每周一凌晨2点执行
0 2 * * 1  sh /etc/letsencrypt/letsencrypt-passworks.sh >> /var/log/letsencrypt/letsencrypt-passworks.log 2>&1
七、参考
  • ubuntubionic-haproxy
  • 官方文档
  • https://websiteforstudents.com/generate-free-wildcard-certificates-using-lets-encrypt-certbot-on-ubuntu-18-04/
  • https://moxo.io/blog/2018/01/30/obtain-and-renew-tls-certs-using-letsencrypt/
  • https://www.willh.cn/articles/2018/07/27/1532676216270.html
  • https://www.jesusamieiro.com/remove-revoke-a-domain-in-lets-encrypt/
  • https://medium.com/@mhagemann/correct-way-to-delete-a-certbot-ssl-certificate-e8ee123e6e01
  • Let’s Encrypt 获取 TLS 证书(Webroot + Nginx)
  • Let’s Encrypt 终于支持通配符证书了

你可能感兴趣的:(运维,负载均衡)