SSL证书到期了怎么续怎么申请SSL证书

背景

我的网站SSL证书到期了,之前申请的是泛域名SSL证书,现在想要续一下,或者重新申请一下。整理一下做个笔记,防止下次到期之后再去查资料

本次查询资料

https://www.jianshu.com/p/4fcc5001f03f
https://zhuanlan.zhihu.com/p/588840981

操作记录

下面是整理的几个方式,我这次续域名是直接使用的下面的dns方式申请中的 Automatic 自动申请直接续的,这个方法要求是有cloudfare的域名,且需要提供userid和token。如果不是这种平台申请的,可以按照下面的几个方法,选择一个去尝试。

安装acme.sh

1
curl  https://get.acme.sh | sh

生成证书

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证

http方式

http 方式需要在你的网站根目录下放置一个文件, 以此来验证你的域名所有权,完成验证,只需要指定域名, 并指定域名所在的网站根目录,acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证,着方式较适合独立域名的站点使用,比如博客站点等。

1
2
3
4
5
6
7
8
9
10
11
# 直接根据域名和网站根目录生成证书
./acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

# 如果是apache服务,用这个
acme.sh --issue -d mydomain.com --apache

# 如果是nginx 反代
acme.sh --issue -d mydomain.com --nginx

# 如果只是想申请一个证书,还没搭建服务
acme.sh --issue -d mydomain.com --standalone

dns方式

除了上述 http方式外,另一种方式即手动配置DNS的方式,十分适合用于生成范解析证书。
优势:不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证
劣势:如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权

DNS手动生成,手动添加TXT解析

  1. 生成证书记录
1
./acme.sh --issue -d *.example.com  --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
  1. 在域名解析中添加证书TXT记录

  2. 验证解析是否生效

  3. 生成证书

1
./acme.sh --renew -d *.example.com  --yes-I-know-dns-manual-mode-enough-go-ahead-please

配置 Automatic DNS API 生成证书(自动生成证书)

dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证,acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成。

  1. 登录到cloudfare

先登录到 dnspod 账号, 生成你的 api id 和 api key, 都是免费的,然后指定自己的需要的参数,如下

1
2
3
export CF_Id="1234"
export CF_Key="sADDsdasdgdsf"
acme.sh --issue --dns dns_cf -d hengshare.top -d *.hengshare.top --debug
  1. 使用之前的设置再次生成证书(相当于续期)
1
acme.sh  --issue   -d  hengshare.top -d *.hengshare.top   --dns  dns_cf --debug

本次学到的知识点

为什么会有SSL免费证书

自从数年前苹果开始强制要求所有IOS所有应用必须全部使用 https,以及google、baidu、bing 这三大搜索引擎开始大规模支持 https,https 已经成为现在保障网站完全的最基础需求,大量的供应商开始出现,并提供证书服务,但是对于一些非盈利性质的网站或博客站长,或公司测试环境也想使用https认证时,并不想在这上面投入太多的资金,于是乎理所当然会想要追求免费且有效的ssl证书了。

Let’s Encrypt 是什么?

Let’s Encrypt 作为一个开源 SSL 的项目逐渐被广大用户传播和使用,是由 Mozilla、Cisco、Akamai、IdenTrust、EFF 等组织人员发起,主要的目的也是为了推进网站从 HTTP 向 HTTPS 过度的进程,目前已经有越来越多的商家加入和赞助支持。
和通过openssl等工具生成的证书不同,Let’s Encrypt 获得 IdenTrust 交叉签名,这就是说可以应用且支持包括 FireFox、Chrome 在内的主流浏览器的兼容和支持,可以说是真正意义上免费且有效的SSL证书。

acme.sh 是什么?

Let’s Encrypt 的最大贡献是它的 ACME 协议,而 acme.sh 脚本可以通过 ACME 协议 从 Let’s Encrypt 生成免费的 SSL 证书。
一般生成的证书有效期只有60 ~ 90天,主要是为了避免认证私钥泄露,但是对于一些非盈利网站和个人网站来说基本是够用的,对于一些想长期使用的,现在已经有不少的 Let’s Encrypt 自动续期脚本了,配好后就不用管了,非常方便。
acme.sh 的使用非常“傻瓜式”,只要照着指令参数做就可以轻松搞定的,只需要指定自己的域名就可以用,根据-h的说明菜单指引,简单修改一下参数就可以拿来用的。

证书分哪几种类型?要申请证书要经过什么步骤?

值得注意的是证书分为三种, 域名验证型(DV)证书, 组织验证(OV), 扩展验证(EV), 而let’s encrypt提供的是第一种, 对于个人而言, 三者没有太大的区别, 因为个人一般要求很低, 能够加密数据就行, 如果有更高的要求还是需要额外花费一笔钱去购买证书的。还有就是免费证书一般时间不会很长, 60天,90天不等, 不同的机构不一样, 所以需要额外的处理续期的问题, 当然了, 续期也是免费的。

要获得免费证书需要完成一些挑战, 大致分为两类, 访问挑战, DNS挑战。

访问挑战指以约定的方式防止指定的内容, 比如你的域名需要能够提供http://<你的域名>/.well-known/acme-challenge/地址的访问.

DNS挑战指在域名的记录中加入指定的内容, 比如在你的域名下创建一天TXT记录, 值是_acme-challenge.<YOUR_DOMAIN>.

当然了, 官方不是这么命名的, 分别是HTTP-01验证, DNS-01验证, 还有TLS-SNI-01验证, TLS-ALPN-01验证. 各个验证详情参考: https://letsencrypt.org/zh-cn/d

为什么会出现免费的ssl证书

如果使用openssl创建证书, 你可能需要创建6个文件才能完成工作, 会很抓狂, 如果你还不懂各个步骤的意义就会对证书的创建望而生畏(我以前就是…), 所以出现了极傻瓜式的工具mkcert, 无脑创建证书很快很有用, 它甚至还能帮你安装根证书, 从此世界安静了, 可是随着对证书的深入发现还是会需要openssl来完成更细致的需求, 所以openssl yyds, 自签名证书的一个问题就是无法让所有人接受, 所以需要购买CA机构签名的证书, 但是小网站, 个人而言根本不需要那种专业性的证书, 所以出现大量的免费证书颁发机构, 从此https流量高歌猛进.

免费证书用的最多的脚本是什么?

免费的ssl证书已经有很多了, 但是在本人的记忆中是let’s encrypt极快的推动的免费ssl证书的进程。