ssl证书申请
安装acme.sh
acme.sh 是一个集成了 ACME 客户端协议的 Bash 脚本,按照官方文档说明,我们直接在 Linux 下安装。
curl https://get.acme.sh | sh -s email=username@example.com
#国内备用地址
curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false | sh -s email=my@example.com
#安装完重新加载环境变量
source ~/.bashrc
#开启自动更新
acme.sh --upgrade --auto-upgrade
替换username@example.com为自己的邮箱,避免无法收到邮件。
证书签发
手动签发
选择CA机构
目前 acme.sh 支持 5 个正式环境 CA,分别是 Let's Encrypt、Buypass、ZeroSSL、SSL.com和 Google Public CA,默认使用 ZeroSSL,如果需要更换可以使用如下命令:
切换 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
切换 Buypass
acme.sh --set-default-ca --server buypass
切换 ZeroSSL
acme.sh --set-default-ca --server zerossl
切换 SSL.com
acme.sh --set-default-ca --server ssl.com
切换 Google Public CA
acme.sh --set-default-ca --server google
申请证书
DNS认证方式
以cloudflare为例
acme.sh --issue --dns -d *.hechunyu.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
命令执行后需要在DNS解析里添加一条TXT类型的解析记录
等待生效,一般几分钟内生效。
生效后再次申请
acme.sh --renew --dns -d *.hechunyu.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
申请成功后,最后会打印出证书文件存放路径。
如果出现一直重试15秒的情况,更换另一个证书申请机构,重新申请。
使用api方式自动添加DNS解析记录
以cloudflare为例,申请api权限
我的个人资料,左侧 API令牌
创建令牌Token
权限为编辑,区域选择要申请的域名,ip筛选建议填上,填上之后只有该ip可以调用api
创建成功后记住API令牌Token 后边需要用到
获取Account ID和Zone ID
进入到域名管理页面,复制右侧两个id的值
在终端执行下边命令
export CF_Token="复制下来的 Token"
export CF_Account_ID="复制下来的 Account ID"
export CF_Zone_ID="复制下来的 Zone ID"
acme.sh --issue --dns dns_cf -d *.hechunyu.work
HTTP认证方式
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ca.hechunyu.com;
location /.well-known/acme-challenge {
root /opt/openresty/nginx/html/letsencrypt;
}
}
需要注意的是,http方式验证只支持申请固定域名证书,不支持泛域名证书,泛域名证书申请只能用DNS验证方式
执行命令,申请
-w参数为 配置文件里配置的路径
acme.sh --issue -d *.hechunyu.com -w /opt/openresty/nginx/html/letsencrypt
安装证书
acme.sh --install-cert -d *.hechunyu.com \
--key-file /opt/openresty/nginx/conf/cert/hechunyu.com.key \
--fullchain-file /opt/openresty/nginx/conf/cert/hechunyu.com.pem \
--reloadcmd "nginx -s reload"
自动签发
#!/bin/bash
source ~/.bashrc
function acme_fan (){
domain=$1
acme.sh --set-default-ca --server letsencrypt
if acme.sh --issue --dns dns_cf -d *.${domain} ;then
acme.sh --install-cert -d *.${domain} \
--key-file /opt/openresty/nginx/conf/cert/${domain}.key \
--fullchain-file /opt/openresty/nginx/conf/cert/${domain}.pem \
--reloadcmd "nginx -s reload"
else
echo "${domain} 申请失败"
fi
}
echo "尝试申请 *.chunyu.work"
export CF_Token="复制下来的 Token"
export CF_Account_ID="复制下来的 Account ID"
export CF_Zone_ID="复制下来的 Zone ID"
acme_fan chunyu.work
echo "尝试申请 *.hechunyu.com"
export CF_Token="复制下来的 Token"
export CF_Account_ID="复制下来的 Account ID"
export CF_Zone_ID="复制下来的 Zone ID"
acme_fan hechunyu.com
ssl证书申请
https://www.hechunyu.com/archives/sslzheng-shu-shen-qing