前言: 自动化签发证书ssl时,查看文档有些麻烦,而且签发命令较为繁琐,遂写这一篇文章做个记录,以后在申请的时候可以直接复制,也算是对自动化签发ssl证书的一点小探索。
1.两种自动化工具比较
1.1 certbot
按照个人的使用习惯来看,certbot签发命令较为简单.更适合在单机情况下部署ssl证书。是因为它调用dns服务商的api并不多,而且主要是国外DNS服务商(相较于acme.sh),只推荐单机使用.
1.2 acme.sh
是纯shell写的签发工具.相对cerbot而言表现更优秀,支持多个DNS服务商api。能很轻松的完成SSL的自动化,也支持nginx自动部署操作。缺点就是命令较为复杂,记不住.
2.使用自己的服务器签发证书
特别说明:我的实例是基于ubuntu操作系统,下面所有的展示都在ubuntu操作下完成!!!其它系统命令可能会不一样,但certbot和acme.sh签发证书的命令是一样的
2.1使用cerbot签发证书
apt update && apt -y install nginx && apt -y install python3-certbot-nginx
certbot --help
安装好之后回显应该如上图,可以运行 certbot --help查看更多命令.如果apt安装显示没有储存库,你需要尝试添加官方储存库再安装,为了简单且方便演示,我直接从储存库安装了nginx.这时候你就可以把域名解析到服务器所在的ip了。解析好之后,就可以做下一步的工作了。
cd /etc/nginx/sites-enabled
nano nginx.conf
nginx -t
systemctl restart nginx
server {
listen 80;
listen [::]:80;
server_name rsshub.examle.com; #你的域名
}
server {
listen 443 ssl;
server_name rsshub.examle.com; #你的域名
ssl_certificate /ssl/1.pem; #替换为自签名的ssl证书
ssl_certificate_key /ssl/1.key;#替换为自签名的ssl密钥
location / {
proxy_pass http://127.0.0.1:1200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
配置nginx示例,如果需要nginx配置生成请点击以下网址生成操作,注意替换ssl证书处,可以将先将它配置为自签名证书,后续certbot会自动更换为有效证书.
certbot --nginx #签发证书
签发成功后就如上图所示,并且自动更新证书,超级方便有木有!
3.利用acme.sh签发ssl证书
这里我们建议使用google cloud shell签发证书,google cloud shell拥有天然的终端,而且不需要服务器的参与。证书续期时,可以一键命令记忆续期,方便快捷省时省力
3.1安装acme.sh
参见
How to install · acmesh-official/acme.sh Wiki (github.com)
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m [email protected]
- -m [email protected]修改为你的邮箱
安装完成之后会显示安装路径
3.2修改自动化dns
3.2.1选择你的DNS提供商
参见:
dnsapi · acmesh-official/acme.sh Wiki (github.com)
需要这两个 dp_Id和dp_key
3.2.2 强制指定环境变量
cd acme.sh/dnsapi
这里你会发现有很多dns提供商的api选项,如果你不清楚用的哪个
参见:
acme.sh/dnsapi at master · acmesh-official/acme.sh (github.com)
在这个里面搜一下,比如我要用dnspod,,这里你就会发现有两个.sh脚本,看域名识别国内于国际站
2.3 修改api
nano dns_dp.sh
修改这两个为你自己的,修改完毕记得保存
4.1指定签发6个月通配证书(www1.hi.cn)
注意!
从 acme.sh v3.0.6 版本开始,将默认使用 ec-256 作为秘钥算法(详见这条commit),而不是 RSA2048,而 hica-ssl 免费半年通配符证书仅有 RSA4096 (不含)以下是免费的,若需签发免费证书,需要在命令行结尾加 -k 2048
来指定秘钥长度
acme.sh --issue --dns dns_dp -d example.com -d *.example.com --days 180 --server https://acme.hi.cn/directory --force -k 2048
自动dns验证,验证成功后可以下载证书
4.2签发google ca,buypass ca
各种CA限制如图,建议签发谷歌家的,根证书较老兼容性好。而且支持通配
4.2.1buypass证书
acme.sh --server https://api.buypass.com/acme/directory \
--register-account --accountemail [email protected]
acme.sh --server https://api.buypass.com/acme/directory \
--issue -d example.com -d www.example.com ..... \
--days 170 \
--dns dns_dp
4.2.2 google证书
首先获取 EAB key and EAB id,这个在第二个链接里有详细的图文教程,见第二篇文章第三步
参见:
Google Public CA · acmesh-official/acme.sh Wiki (github.com)
手把手教你撸一张谷歌CA的SSL证书 – 萌贴士萌贴士 (moe.tips) ---此文章为手动签发证书,其第一步已经过时,google CA现在无需申请.
获取证书密钥
3.1打开google cloud证书api
https://console.cloud.google.com/apis/library/publicca.googleapis.com?project=xxxxx
tips:注意xxxxx切换为你的project ID 然后点击启用按钮即可 **
3.2打开cloudshell,获取凭据 在cloushell中输入
gcloud beta publicca external-account-keys create#创建凭据
回显如下
[b64MacKey: balabalabala keyId: balabalabala]
注意把这些保存好,下面要用到
acme.sh --register-account -m [email protected] --server google \
--eab-kid xxxxxxx \
--eab-hmac-key xxxxxxx
acme.sh --issue --server google \
-d example.com --dns dns_googledomains
4.2.3其他证书签发
参见:LMS大佬的文章
【ACME】手动签发Buypass及ZeroSSL证书 – Luminous' Home (luotianyi.vc)
4.下载证书
下载之后可以在这里找到证书,记事本打开就可以看到详细.
certbot这里我使用的是腾讯家的轻量做演示,现在无忧支持升级配置了。有无忧的友友们可以去试试!而且最近开发者活动也挺好的,我已经达到LV2了,有50张 trust asia SSL证书福利,这对需要签发证书的老哥觉得是一款超值福利!大家可以去看看细信息,最近还有开发者上云活动!免费领取高达50张SSL证书!老用户也有很好的福利哦!!
https://cloud.tencent.com/act/pro/developer_business-scenario
Comments | NOTHING