在群里小伙伴的推荐下,找到了 let's encrypt,一个免费的 SSL 证书颁发网站~
Let's Encrypt 是一个于 2015 年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的 SSL/TLS 证书。
说完 Let's Encrypt 后,还得再提到一个 acme.sh,它是用于从 Let‘s Encrypt 生成免费的证书,具备以下几个特点:
acme.sh地址:https://github.com/acmesh-official/acme.sh
- 一个纯粹用 **Shell(Unix shell)**语言编写的 ACME 协议客户端。
- 完整的 ACME 协议实施。 支持 ACME v1 和 ACME v2 支持 ACME v2 通配符证书
- 简单,功能强大且易于使用。你只需要 3 分钟就可以学习它。
- Let's Encrypt 免费证书客户端最简单的 Shell 脚本。
- 纯粹用 Shell 编写,不依赖于 python 或官方的 Let's Encrypt 客户端。
- 只需一个脚本即可自动颁发,续订和安装证书。 不需要 root/sudoer 访问权限。
- 支持在 Docker 内使用,支持 IPv6。
安装 acme.sh
首先第一步,安装 acme.sh
curl https://get.acme.sh | sh -s email=my@example.com
执行完成后,会在 home 目录生成一个 .acme.sh 的隐藏文件夹,使用下面命令,进入到文件夹中
# 进入目录
cd ~/.acme.sh/
可以看到,里面生成了配置,其中最重要的就是 acme.sh 这个命令
同时,自动为你创建 cronjob 每天 0:00 点自动检测所有的证书,如果快过期了, 需要更新, 则会自动更新证书。
执行 cronjob -l 命令,即可看到对应的定时任务
同时,小伙伴在执行 acme.sh 的时候,不用担心脚本会污染已有的系统的任何功能和文件,因为所有的修改都会统一维护在 ~/.acme.sh 文件夹
生成 SSL 证书
在生成证书的啥时候,需要去验证一下域名,一般常用的验证方式就是:DNS 验证,也就是在域名解析的地方配置一条 TXT 记录
这种方式的好处是, 你不需要任何服务器, 不需要任何公网 IP , 只需要 DNS 的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。
DNS 方式的真正强大之处在于可以使用域名解析商提供的 API 自动添加 TXT 记录完成验证.
acme.sh 目前支持 阿里云 等数十种解析商的自动集成,以 阿里云 为例, 你需要先登录到 aliyun 账号,生成你的 AccessKey ID 和 AccessKey Secret,然后就可以开始生成证书了。
步骤如下,为了一劳永逸,我们给 acme.sh 开放一个阿里云子账户,授予管理云解析 (DNS) 的权限。
打开,阿里云:访问控制 -> 身份管理 -> 用户,然后创建一个子用户
然后随便输入名称,勾选 OpenAPI 调用访问
创建成功后,记得保存这个用户的 AccessKey ID 和 AccessKey Secret,可以点击下载 CSV 文件下载到本地电脑。
然后在点击刚刚创建的用户,点击添加权限,选择:管理云解析(DNS)的权限
完成上述的所有操作后,回到服务器中,编辑环境变量文件
# 编辑文件
vim ~/.bashrc
添加刚刚获取的阿里云密钥
export Ali_Key="your_ali_key"
export Ali_Secret="your_ali_secret"
添加完成后,在使用 source 命令使其生效
source ~/.bashrc
下图是添加的位置:
安装证书
下面,我们为所有的域名,配置一下 DNS 解析,这里以 www 为例
acme.sh --issue --dns dns_ali -d www.moguit.cn
执行完成后,证书就会自动生成了,同时我们在阿里云上,也会新增域名解析的记录,验证完成后也会自动删除对应的记录
同时,在 .acme.sh 目录下,就可以看到对应的证书了,命令为每个域名都生成了一个文件夹,里面存放证书的信息
证书生成以后,接下来需要把证书 copy 到真正需要用它的地方.
注意,默认生成的证书都放在安装目录下: ~/.acme.sh/
,请不要直接使用此目录下的文件。
例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件。这里面的文件都是内部使用,而且目录结构可能会变化.
正确的使用方法是使用 --install-cert
命令,并指定目标位置, 然后证书文件会被 copy 到相应的位置,以蘑菇为例,所有的证书是存放在 /root/docker-compose/data/mogu_data/ssl/ 目录下的,所以我们需要将对应的证书的公私钥拷贝到对应的目录下:
# 给 www 安装证书
acme.sh --install-cert -d www.moguit.cn \
--key-file /root/docker-compose/data/mogu_data/ssl/vue_mogu_web/www.moguit.cn.key \
--fullchain-file /root/docker-compose/data/mogu_data/ssl/vue_mogu_web/www.moguit.cn._bundle.crt \
等完成所有的操作后,在重启一下蘑菇的 nginx 服务即可
docker-compose -f yaml/mogu_data down
docker-compose -f yaml/mogu_data up -d
等待一段时间后,即可看到网站已经能够顺利的访问了,并且也加上了/
巨人肩膀
-
acme.sh WiKi:https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E
-
acme.sh 申请https流程:https://www.ruolikongjian.cn/articles/265