自动化签发ssl证书记录

发布于 2023-04-03  1947 次阅读


前言: 自动化签发证书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

image-20230403205617462.png

安装好之后回显应该如上图,可以运行 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会自动更换为有效证书.

NGINXConfig | DigitalOcean

certbot --nginx #签发证书

image-20230403205617462.png

签发成功后就如上图所示,并且自动更新证书,超级方便有木有!

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]

image-20230326211830135.png

安装完成之后会显示安装路径

3.2修改自动化dns

3.2.1选择你的DNS提供商

参见:

dnsapi · acmesh-official/acme.sh Wiki (github.com)

image-20230326212056595.png

需要这两个 dp_Id和dp_key

3.2.2 强制指定环境变量

cd acme.sh/dnsapi

image-20230326212514753.png

这里你会发现有很多dns提供商的api选项,如果你不清楚用的哪个

参见:

acme.sh/dnsapi at master · acmesh-official/acme.sh (github.com)

image-20230326212722173.png

在这个里面搜一下,比如我要用dnspod,,这里你就会发现有两个.sh脚本,看域名识别国内于国际站

image-20230326212819054.png

2.3 修改api

nano dns_dp.sh

image-20230326213826971.png

修改这两个为你自己的,修改完毕记得保存

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

image-20230326213737845.png

自动dns验证,验证成功后可以下载证书

image-20230326213826971.png

4.2签发google ca,buypass ca

各种CA限制如图,建议签发谷歌家的,根证书较老兼容性好。而且支持通配

image-20230403214935738.png

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.下载证书

image-20230326213943011.png

image-20230326214004450.png

image-20230326214106198.png

下载之后可以在这里找到证书,记事本打开就可以看到详细.

certbot这里我使用的是腾讯家的轻量做演示,现在无忧支持升级配置了。有无忧的友友们可以去试试!而且最近开发者活动也挺好的,我已经达到LV2了,有50张 trust asia SSL证书福利,这对需要签发证书的老哥觉得是一款超值福利!大家可以去看看细信息,最近还有开发者上云活动!免费领取高达50张SSL证书!老用户也有很好的福利哦!!

https://cloud.tencent.com/act/pro/developer_business-scenario

https://cloud.tencent.com/act/pro/yunmember

image-20230403221354567.png