侧边栏壁纸
博主头像
潘文波的小破站

行动起来,活在当下

  • 累计撰写 6 篇文章
  • 累计创建 8 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

acme获取https证书

潘文波
2022-11-22 / 0 评论 / 0 点赞 / 787 阅读 / 0 字

通过acme可以轻松获取https证书,证书有效期是3个月,但是可以通过自动化脚本,到期之前自动续期。

acme.sh 安装

在线安装

curl https://get.acme.sh | sh -s [email protected]
cd ./.acme.sh

git安装

git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m [email protected]

如果是国内环境且没有科学上网,可能会安装失败;可以使用以下替代脚本安装:

git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m [email protected]

注册ACME客户端

./acme.sh --register-account -m [email protected]

默认的CA服务器使用 ZeroSSL,地址是:https://acme.zerossl.com/v2/DV90 ,你也可以根据自己的喜好或者国内的网络环境切换不同的CA服务器地址:

letsencrypt

# 简写
./acme.sh --register-account -m [email protected] --server letsencrypt

# 不用别名
./acme.sh --register-account -m [email protected] --server https://acme-v02.api.letsencrypt.org/directory

buypass

# 简写
./acme.sh --register-account -m [email protected] --server buypass

# 不用别名
./acme.sh --register-account -m [email protected] --server https://api.buypass.com/acme/directory

sslcom

# 简写
./acme.sh --register-account -m [email protected] --server sslcom

# 不用别名
./acme.sh --register-account -m [email protected] --server https://acme.ssl.com/sslcom-dv-rsa

# 或者
./acme.sh --register-account -m [email protected] --server https://acme.ssl.com/sslcom-dv-ecc

google

# 简写
./acme.sh --register-account -m [email protected] --server google

# 不用别名
./acme.sh --register-account -m [email protected] --server https://acme.certcloud.cn/acme/directory

certcloud

./acme.sh --register-account -m [email protected] --server https://dv.acme-v02.api.pki.goog/directory

控制台返回一下结果表示注册客户端成功:

[Tue Dec  5 17:06:49     2023] Registering account: https://********
[Tue Dec  5 17:06:52     2023] Already registered
[Tue Dec  5 17:06:53     2023] ACCOUNT_THUMBPRINT='yph****47lL3********'

申请证书

申请证书的时候可以使用手动DNS验证可以根据域名运营商提供的密钥自动进行DNS验证,为了方便,这里就跳过手动验证,直接使用DNS自动验证。
自动dns验证的原理是ACME客户端(acme.sh等)在收到服务端返回的验证值后通过dnsapi自动设置对应域名的记录值,在CA验证完成后acme客户端自动删除,acme.sh在访问dnsapi时需要对应的授权密钥。

腾讯云

配置访问访问密钥:

export Tencent_SecretId="<id>"
export Tencent_SecretKey="<key>"

有两种方式获取腾讯云的SecretId 和 SecretKey,下面进行说明:

方式一:使用主账号API密钥

您可以直接跳转腾讯云API密钥管理处创建密钥,也可在腾讯云官网搜索框搜索访问管理,选择API密钥管理并点击新建密钥,如下图所示:

image.png

上述方式的密钥权限较大,请谨慎使用

方式二:使用子账号密钥

仍然通过上述方式进入访问管理,策略->新建自定义策略

image.png

选择按策略语法创建->空白模板,填写基本信息,并将策略语法修改为以下内容,并点击完成创建

{
    "statement": [
        {
            "action": [
                "dnspod:DescribeRecordFilterList",
                "dnspod:DescribeRecordList",
                "dnspod:CreateRecord",
                "dnspod:DeleteRecord"
            ],
            "effect": "allow",
            "resource": [
                "*"
            ]
        }
    ],
    "version": "2.0"
}

接着选择左侧用户->用户列表,并点击新建用户

image.png

选择快速创建,填写用户信息,并选择编程访问

image.png

image.png

image.png

创建用户成功界面能获取到默认创建的SecretId 和 SecretKey,或者从用户列表进入用户详情,点击新建密钥

image.png

获取到SecretId 和 SecretKey后你还需要为新创建的子账户进行授权,将刚刚创建的策略关联到子账户

image.png

在获取SecretId 和 SecretKey时,应当清楚密钥的权限范围

申请证书脚本:

./acme.sh --issue --dns dns_tencent -d example.com -d *.example.com -d a.com --server https://acme.certcloud.cn/acme/directory

dnspod

腾讯云已经收购dnspod,如果你已登录腾讯云平台,跳转到dnspod是免登录的。腾讯云平台购买的域名能在dnspod官网 中查询到,因此你也可以使用dnspod的密钥进行授权自动验证域名所有权。 如果您的域名在dnspod解析,使用类似的命令如下:

acme.sh --issue --dns dns_dp -d example.com -d *.example.com -d a.com --server https://acme.certcloud.cn/acme/directory

需要配置环境变量,,下面配置环境变量的命令仅在当前窗口有效,请根据自己的服务器配置永久生效的环境变量

export DP_Id="<id>"
export DP_Key="<key>"

登录dnspod官网后点击头像的API密钥,你可以查看在到腾讯云创建的密钥,详细流程参考上一模块,我们接着创建DNSPod Token

image.png

选择 DNSPod Token,就到了 dnspod 的 token 生成页面,点击创建密钥,获取到 ID 和 token并设置到对应的环境变量DP_IdDP_Key

image.png

阿里云

如果您的域名在阿里云DNS解析,使用类似的命令如下:

./acme.sh --issue --dns dns_ali -d example.com -d *.example.com -d a.com --server https://acme.certcloud.cn/acme/directory

需要配置环境变量,,下面配置环境变量的命令仅在当前窗口有效,请根据自己的服务器配置永久生效的环境变量

export Ali_Key="<key>"
export Ali_Secret="<secret>"

获取阿里云的key和secret过程为:

  1. 登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 用户,创建用户会自动生成一对key和secret。

  3. 用户页面,单击目标RAM用户名称。

  4. 用户AccessKey区域,单击创建AccessKey

  5. 根据界面提示完成安全验证。

  6. 创建AccessKey对话框,查看AccessKey ID和AccessKey Secret。您可以单击下载CSV文件,下载AccessKey信息。或单击复制,复制AccessKey信息。

  7. 单击确定

创建过程如下图所示:

image.png

image.png

在用户下创建密钥后还需要给用户进行AliyunDNSFullAccess授权,如下图所示:

image.png

上述过程使用了系统策略AliyunDNSFullAccess,你可以自定义策略,控制授权的粒度。

Amazon Route53

您的域名在AWS Route53解析,可以使用类似如下命令:

acme.sh --issue --dns dns_aws -d example.com -d *.example.com -d a.com --server https://acme.certcloud.cn/acme/directory

如果出现AWS Route53 rate exceeded错误,可以在 api 请求之间添加睡眠时间,避免AWS的限速问题:

export  AWS_DNS_SLOWRATE=1

需要配置环境变量,下面配置环境变量的命令仅在当前窗口有效,请根据自己的服务器配置永久生效的环境变量:

export  AWS_ACCESS_KEY_ID="<key id>"
export  AWS_SECRET_ACCESS_KEY="<secret>"

下面用国内AWS获取id和secret进行说明,国外AWS也是类似操作。过程如下:

  1. 点击跳转国内AWS IAM控制台,或搜索服务IAM进入
  2. 在左侧导航栏,选择访问管理 > 用户
  3. 创建用户并点击用户名进入或直接点击用户名进入
  4. 选择安全凭证 > 访问密钥
  5. 创建访问密钥

创建过程参考下列图例:

image.png

image.png

此时密钥还不能正常使用,还需要给密钥所在用户授权。在左侧导航栏选择访问管理 > 策略,点击创建策略,如下图所示:

image.png

策略编辑器选择JSON,策略内容为:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "route53:GetHostedZone",
                "route53:ListHostedZones",
                "route53:ListHostedZonesByName",
                "route53:GetHostedZoneCount",
                "route53:ChangeResourceRecordSets",
                "route53:ListResourceRecordSets"
            ],
            "Resource": "*"
        }
    ]
}

如下图所示:

image.png

接着下一步输出策略名称和策略描述,最后点击创建策略

创建策略成功后我们继续给用户添加权限,在左侧导航栏选择访问管理 > 用户,选择刚刚创建密钥的用户进入详情界面,点击添加权限,再选择直接附加策略,勾选我们刚刚创建的策略即可。

image.png

用户详情界面的策略列表显示我们刚刚新增的策略即配置成功。

将证书拷贝到指定位置

./acme.sh --install-cert -d "your domain" \
--cert-file your-cert-path/cert.pem \
--key-file your-cert-path/key.pem \
--fullchain-file your-cert-path/fullchain.pem \
--reloadcmd "/usr/sbin/nginx -s reload"

我这里使用的nginx,所以证书拷贝到nginx引用到目录之后,执行nginx重新加载配置到指令 /usr/sbin/nginx -s reload ,如果你使用的是其它代理服务器,则执行相应的重载指令。

在执行过上面的安装证书只令之后,acme会添加一个定时任务,如果潘查询到当前证书的有效期小于30天则会重新申请证书,然后执行上面的install命令,从而保证证书不会过期。

手动更新证书

如果要手动更新证书的话,需要执行以下命令:

./acme.sh --renew -d "your domain" \
--yes-I-know-dns-manual-mode-enough-go-ahead-please --force

www.example.comexample.com 的支持

申请证书

./acme.sh --issue \
--dns dns_dp -d "www.abc.com" \
--dns dns_dp -d "abc.com"

安装证书

./acme.sh --install-cert -d "example.com" -d "www.example.com" \
--cert-file your-cert-path/cert.pem \
--key-file your-cert-path/key.pem \
--fullchain-file your-cert-path/fullchain.pem \
--reloadcmd "/usr/sbin/nginx -s reload"

查看证书

$ acme.sh --list
Main_Domain             KeyLength  SAN_Domains  CA                                    Created               Renew
abcbcdwq.dasdsa.online  "2048"     no           https://acme.cmc.test/acme/directory
bcbc.dasdsa.online      "2048"     no           https://acme.cmc.test/acme/directory  2023-12-14T11:57:59Z  2024-02-11T11:57:59Z
qqq.ldlb.site           "2048"     no           https://acme.cmc.test/acme/directory  2023-12-15T02:15:01Z  2024-02-12T02:15:01Z

证书续期

自动续期

acme.sh的定时任务会在证书需要续期时自动完成证书续期、证书下载、将证书拷贝到指定位置、执行 reloadcmd 参数中的命令,可以通过 crontab -e 查看执行自动执行计划。

手动续期

acme.sh --renew -d example.com
0

评论区