Let‘s Encrypt 泛域名通用证书申请

现在很多手机(主要是ios),第三方服务对外部资源的访问都需要HTTPS协议,且证书要可信机构签发的。自己搭建服务应用做开发测试越来越不方便,

什么是 Let’s Encrypt?

部署 HTTPS 网站的时候需要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用。

Let’s Encrypt 也是一个 CA 机构,但这个 CA 机构是免费的。也就是说签发证书不需要任何费用。Let’s Encrypt 由于是非盈利性的组织,需要控制开支,他们搞了一个非常有创意的事情,设计了一个 ACME 协议。

那为什么要创建 ACME 协议呢,传统的 CA 机构是人工受理证书申请、证书更新、证书撤销,完全是手动处理的。而 ACME 协议规范化了证书申请、更新、撤销等流程,只要一个客户端实现了该协议的功能,通过客户端就可以向 Let’s Encrypt 申请证书,也就是说 Let’s Encrypt CA 完全是自动化操作的。

任何人都可以基于 ACME 协议实现一个客户端,官方推荐的客户端是Certbot

什么是通配符证书

在没有出现通配符证书之前,Let’s Encrypt 支持两种证书。

1)单域名证书:证书仅仅包含一个主机。

2)SAN 证书:域名通配符证书类似 DNS 解析的泛域名概念,通配符证书就是证书中可以包含一个通配符(*.exmaple.com)。主域名签发的通配符证书可以在所有子域名中使用,比如 www.example.combbs.example.com

申请通配符证书

Let’s Encrypt 上的证书申请是通过 ACME 协议来完成的。ACME 协议规范化了证书申请、更新、撤销等流程,实现了 Let’s Encrypt CA 自动化操作。解决了传统的 CA 机构是人工手动处理证书申请、证书更新、证书撤销的效率和成本问题。

ACME v2 是 ACME 协议的更新版本,通配符证书只能通过 ACME v2 获得。要使用 ACME v2 协议申请通配符证书,只需一个支持该协议的客户端就可以了,官方推荐的客户端是 Certbot

客户在申请 Let’s Encrypt 证书的时候,需要校验域名的所有权,证明操作者有权利为该域名申请证书,目前支持三种验证方式:

  • dns01:给域名添加一个 DNS TXT 记录。
  • http01:在域名对应的 Web 服务器下放置一个 HTTP well-known URL 资源文件。
  • tls-sni01:在域名对应的 Web 服务器下放置一个 HTTPS well-known URL 资源文件。

申请通配符证书,只能使用 dns验证的方式,下面开始申请

Certbot申请流程

本人觉得通过acme.sh申请安装SSL证书更方便快捷,下面是acme.sh脚本的使用过程介绍

  • 安装脚本
curl  https://get.acme.sh | sh

执行成功后会自动安装到:~/.acme.sh/

acme.sh 目前支持 AliYun,cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成。可以使用域名解析商提供的 api 自动添加 txt 记录完成验证。
详情参见:https://github.com/acmesh-official/acme.sh/wiki/dnsapi

脚本通过API操作域名提供商的解析规则,会添加一条规则用于域名所有权验证

  • api秘钥导入
# DNSPod
export DP_Id="YourID"
export DP_Key="YourKey"
# AliYun
export Ali_Key="YourKey"
export Ali_Secret="YourSecret"

万网/阿里云 域名解析
操作方法:点击右上角头像 -> 选择 AccessKey -> 点击开始使用子用户AccessKey -> 起个自定义名称 -> 搜索 NDS -> 选择 系统 AliyunDNSFullAccess

  • 证书签发
 ~/.acme.sh/acme.sh  --issue --dns dns_dp -d *.YourDomain.com
 ~/.acme.sh/acme.sh  --issue --dns dns_aliyun -d *.YourDomain.com
# 命令执行成功后的显示
[2020年 03月 15日 星期五 23:19:10 CST] Creating domain key
······
[2020年 03月 15日 星期五 23:19:10 CST] The txt record is added: Success.
[2020年 03月 15日 星期五 23:19:10 CST] Let's check each dns records now. Sleep 20 seconds first.
······
[2020年 03月 15日 星期五 23:19:10 CST] Pending
[2020年 03月 15日 星期五 23:19:10 CST] Pending
[2020年 03月 15日 星期五 23:19:10 CST] Pending
[2020年 03月 15日 星期五 23:19:10 CST] Pending
[2020年 03月 15日 星期五 23:19:10 CST] Success
······
[2020年 03月 15日 星期五 23:19:10 CST] Verify finished, start to sign.
······
[2020年 03月 15日 星期五 23:19:10 CST] Cert success.

最后看到 Cert success 表示申请成功
证书会存放在 ~/.acme.sh/*.YourDomain.com/

  • 安装证书
    以nginx为例
~/.acme.sh/acme.sh --installcert -d *.YourDomain.com \
--key-file       /Nginx目录/存放证书的目录/key名称.pem  \
--fullchain-file /Nginx目录/存放证书的目录/cert名称.pem \
--reloadcmd     "service nginx force-reload"
# 命令执行成功后的显示
[2020年 03月 15日 星期五 23:19:10 CST] Installing key to:/Nginx目录/存放证书的目录/key.pem
[2020年 03月 15日 星期五 23:19:10 CST] Installing full chain to:/Nginx目录/存放证书的目录/cert.pem
[2020年 03月 15日 星期五 23:19:10 CST] Run reload cmd: service nginx force-reload
Redirecting to /bin/systemctl force-reload  nginx.service
[2020年 03月 15日 星期五 23:19:10 CST] Reload success
  • 配置nginx
server {
  listen 443;
  // ······
  // 修改证书路径
  ssl_certificate         存放证书的目录/cert名称.pem;
  ssl_certificate_key     存放证书的目录/key名称.pem;
  // ······
}
  • 配置自动更新
    Let’s Encrypt 的证书有效期是90天,所以能够自动更新是比较重要的功能,脚本通常会自动配置更新定时任务。
    实际是自动执行如下命令

./acme.sh --cron

[Tue Dec  8 11:51:43 CST 2020] ===Starting cron===
[Tue Dec  8 11:51:43 CST 2020] Renew: '*.good365.net'
[Tue Dec  8 11:51:43 CST 2020] Skip, Next renewal time is: Sun Jan 31 04:05:14 UTC 2021
[Tue Dec  8 11:51:43 CST 2020] Add '--force' to force to renew.
[Tue Dec  8 11:51:43 CST 2020] Skipped *.good365.net
[Tue Dec  8 11:51:43 CST 2020] Renew: '*.YourDomain.com'
[Tue Dec  8 11:51:43 CST 2020] Skip invalid cert for: *.YourDomain.com
[Tue Dec  8 11:51:43 CST 2020] Skipped *.YourDomain.com
[Tue Dec  8 11:51:43 CST 2020] ===End cron===

也可手动配置定时任务
crontab -e

0 1 * * * /root/.acme.sh/acme.sh --cron
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值