前言
简介
Let’s Encrypt 是一个由非营利性组织互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。它只支持 DV 证书的签发,也就是通过验证域名所有权,然后签发该域名的证书。它支持两种验证方式,一种是通过 HTTP 的方式验证,另一种是通过 DNS 的方式验证,只有这种支持通配符,而今天要讲的就是第二种方式。
官网地址:https://letsencrypt.org
客户端
Let’s Encrypt 使用 ACME 协议来验证您对给定域名的控制权并向您颁发证书。要获得 Let’s Encrypt 证书,就需要选择符合 ACME 协议的客户端软件:
- 官方
提供了很多证书的申请方式方法:https://letsencrypt.org/zh-cn/docs/client-options/
- certbot
既可以获取证书,也可以安装证书,适用于许多操作系统,并且文档很详细、完善。
- acme.sh
目前 Let’s Encrypt 免费证书客户端中最简单、最智能的 shell 脚本,可以自动发布和续订 Let’s Encrypt 中的免费证书
阿里云
由于使用的是 dns 方式,且为了简化自动续签,因此为客户端提供阿里云操作 dns 的账号以及密钥
申请密钥
- 登录阿里云
- 进入 RAM 访问控制(可直接在右上角搜索:访问控制)
- 进入 RAM 中的身份管理中的用户组
- 创建用户组
- 进入新建的用户组新增授权
- 点击左侧用户菜单并创建用户 >访问方式一定要勾选
Open API 调用访问
- 将新建的用户添加到前面创建的用户组
- 到认证管理中创建 AccessKey
创建成功后建议直接导出,防止忘了
acme.sh
安装
自动安装
邮箱用于提醒证书过期
curl https://get.acme.sh | sh -s email=my@example.com
测试收否安装成功
[root@yedajiang44 .acme.sh]# acme.sh --version
https://github.com/acmesh-official/acme.sh
v3.0.1
生成证书
设置环境变量
Ali_Key
和Ali_Secret
会被保存至~/.acme.sh/account.conf
文件中
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
生成
建议启用 --debug 参数,因为可以看到详细的执行过程,否则会很容易误以为命令假死
acme.sh --issue --dns dns_ali -d example.com -d www.example.com --debug
- 期间acme会请求
80
端口,如果需要指定端口可使用--httpport
- 如果需要
pfx
证书可以使用--to-pkcs12 --password 密码
- 如果申请通配符证书则在在域名前面加上
*
,如*.example.com
记住输出的目录
配置 nginx
示例:
server {
listen 80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ip.yedajiang44.com;
ssl_certificate /home/yedajiang44/.acme.sh/yedajiang44.com/fullchain.cer;
ssl_certificate_key /home/yedajiang44/.acme.sh/yedajiang44.com/yedajiang44.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
default_type text/plain;
return 200 "$remote_addr\n";
}
}
ssl_certificate
一定要设置为fullchain.cer
- 手动重新加载 nginx
nginx -s reload
总结
至此你的网站已经可以使用 https 了
其实比较麻烦的就是阿里云的密钥,其他的都还好。