使用 ACME.SH 申请 Google CA SSL 证书 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jonathon523
V2EX    分享创造

使用 ACME.SH 申请 Google CA SSL 证书

  •  
  •   jonathon523
    Jonathan523 2023-01-20 17:14:28 +08:00 7673 次点击
    这是一个创建于 1071 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文原创于Cestlavie Blog|原文链接


    前言

    最近谷歌开放了自家的 GTS CA(Google Trust Services),谷歌作为全球大厂那不得好好嫖一下!目前该服务进入了 Public Review 阶段,不再需要申请内测资格,而且支持 acme.sh 快速申请,那不就是嫖他的好日子来了吗!

    证书简介

    GTS SSL 证书的特点是

    • 支持 IP 地址块持有者申请 IP 地址证书

    • 根 CA 为 GlobalSign,根 CA 的支持性和兼容性比 Let's Encrypt

    • 支持安全性和性能更好的ECC 证书

    • 支持多域名泛域名证书申请(例如*.cestlavie.moe

    • 有效期为90 天

    • 支持的 ACME 验证方式为TLS-ALPN-01HTTP-01、和 DNS-01

    • 暂不支持邮箱验证方式申请

    • 暂不支持国际化域名编码的域名

    申请步骤

    获取注册密钥

    打开shell.cloud.google.com,输入以下代码

    $ gcloud beta publicca external-account-keys create #创建凭据 

    回显为

    $ gcloud beta publicca external-account-keys create API [publicca.googleapis.com] not enabled on project [<projectid>]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y #允许创建 publica API Enabling service [publicca.googleapis.com] on project [<projectid>]... Operation "operations/acat.p2-<projectid>-<uuid>" finished successfully. Created an external account key [b64MacKey: <hmac_key> keyId: <keyid>] 

    保存好输出的<hmac_key><keyid>,接下来要用

    安装acme.sh

    curl https://get.acme.sh | sh -s # 请确保已安装 curl 

    显示Install success!即为安装成功

    使用凭据注册

    acme.sh --set-default-ca --server google #切换默认 CA 为 Google acme.sh --server https://dv.acme-v02.api.pki.goog/directory \ --register-account --accountemail <Your_Email> --eab-kid <keyid> --eab-hmac-key <hmac_key> # 使用刚刚获取凭据注册账号 

    签发证书

    1. 使用 TXT 记录手动验证 DNS
    acme.sh --issue --dns -d yourdomain.com \ --yes-I-know-dns-manual-mode-enough-go-ahead-please 

    然后根据回显中

    Add the following TXT record: Domain: '_acme-challenge.yourdomain.com' TXT value: '<TXT_value>' 

    设置 DNS 记录,完成后输入

    acme.sh --renew -d yourdomain.com \ --yes-I-know-dns-manual-mode-enough-go-ahead-please 

    完成证书申请

    显示Cert success即为申请成功

    可以在~/.acme.sh/yourdomain.com/下获取证书

    1. 使用 Cloudflare API 自动验证 DNS

    (注:这里默认使用了 Cloudflare 来演示自动申请证书,详细的支持列表及申请方法可以在这里找到)

    首先获取你的Global API Key可在此处获取

    然后在终端中输入

    export CF_Key='<YourGlobalAPIKey>' export CF_Email="<YourEmail>" 

    接下来申请证书,输入

    acme.sh --issue --dns dns_cf -d yourdomain.com #单域名 acme.sh --issue --dns dns_cf -d *.yourdomain.com #泛域名 acme.sh --issue --dns dns_cf -d sub1.yourdomain.com -d sub2.yourdomain.com #多域名 acme.sh --issue --dns dns_cf -d yourdomain.com --ecc #ECC 证书 

    看到回显Cert success即为申请成功,可以在~/.acme.sh/yourdomain.com/下获取证书

    • 此时 Cloudflare 凭据会自动存储至~/.acme.sh/account.conf用于续期目的

    文中部分信息已做脱敏处理

    注:申请下的证书路径为

    参考文献

    1. acme.sh Wiki - github.com

    2. Automate Public Certificates Lifecycle Management via RFC 8555 (ACME) - google.com

    30 条回复    2023-01-27 09:36:03 +08:00
    ab
        1
    ab  
       2023-01-20 19:06:33 +08:00
    国内 VPS 可以吗?
    jonathon523
        2
    jonathon523  
    OP
       2023-01-20 19:59:59 +08:00 via Android
    @ab 可以的,在国内有申请节点,但是需要先魔法在 Google Cloud Shell 获得 b64MacKey 和 keyid
    666VS2333
        3
    666VS2333  
       2023-01-20 21:25:32 +08:00 via Android
    到期可以续吗
    jonathon523
        4
    jonathon523  
    OP
       2023-01-20 21:33:04 +08:00 via Android
    @666VS2333 可以的,支持 acme.sh 自动续期
    666VS2333
        5
    666VS2333  
       2023-01-20 22:48:16 +08:00 via Android
    @jonathon523 感谢老哥
    daiv
        6
    daiv  
       2023-01-20 23:06:18 +08:00
    Let's Encrypt / ZeroSSL

    现在多了这个, 给个切换的理由呗
    jonathon523
        7
    jonathon523  
    OP
       2023-01-21 01:19:11 +08:00 via Android
    @daiv 国内 VPS 申请方便;根 CA 为 GlobalSign ,根 CA 的支持性和兼容性比 Let's Encrypt 好;签发速度比 ZeroSSL 快得多,ZeroSSL 经常时不时抽风,这个不会。
    superares
        8
    superares  
       2023-01-21 08:18:17 +08:00 via iPhone
    可惜还是 preview 状态,cert-manager 还不支持
    simau
        9
    simau  
       2023-01-21 08:56:07 +08:00
    补充一下:需要先设置一下自己的 project id ,project id 可以在 gcp console 页找到,$ gcloud config set project project_id
    jonathon523
        10
    jonathon523  
    OP
       2023-01-21 08:59:56 +08:00 via Android
    @superares 已经是 Public Review 了
    官方文档里面有说
    For Kubernetes based workloads
    If you are using Kubernetes, thanks to cert-manager (another ACME client), it is just as easy.
    具体请看 https://cloud.google.com/blog/products/identity-security/automate-public-certificate-lifecycle-management-via--acme-client-api
    jonathon523
        11
    jonathon523  
    OP
       2023-01-21 09:03:28 +08:00 via Android
    @simau 可以先在 console.cloud.google.com 顶栏选好项目再点击 Cloud Shell 的图标创建 session ,或者在 shell.console.cloud.google.com 标签页切换栏中点击加号旁边的三角,选择对应的 project id
    jonathon523
        12
    jonathon523  
    OP
       2023-01-21 09:11:43 +08:00 via Android
    @daiv 还想到一个,Let's Encrypt 的证书因为很多翻墙的人和灰产在用,会被 GFW 重点关照。
    simau
        13
    simau  
       2023-01-21 09:20:16 +08:00
    @jonathon523 刚刚试过了,没魔法访问不了 https://dv.acme-v02.api.pki.goog ,op 确定是可以访问?
    superares
        14
    superares  
       2023-01-21 10:27:32 +08:00
    @jonathon523 好使。和 ZeroSSL 的方式一样
    jonathon523
        15
    jonathon523  
    OP
       2023-01-21 10:32:20 +08:00 via Android
    @simau 刚刚测试了一下好像确实访问不了了,估计是这两天刚墙
    我待会儿看看能不能搞个反向代理用
    me221
        16
    me221  
       2023-01-21 13:27:51 +08:00
    感谢分享, 不过国内不能顺利申请
    jonathon523
        18
    jonathon523  
    OP
       2023-01-21 16:14:02 +08:00 via Android
    @winterbells IP 地址证书需要 IP 地址块持有者申请,acme 没法搞
    Hansah
        19
    Hansah  
       2023-01-21 16:33:31 +08:00 via Android
    有老哥弄个自动续期的脚本嘛
    me221
        20
    me221  
       2023-01-21 18:36:30 +08:00
    我打算用 actions 自动续期, 发现 hmac_key 和 keyid 只能用一次....
    300
        21
    300  
       2023-01-21 20:20:37 +08:00 via Android
    @jonathon523 噢噢,突然理解了
    daiv
        22
    daiv  
       2023-01-21 22:24:41 +08:00
    @me221 #20 啊, 那岂不是很不方便
    jonathon523
        23
    jonathon523  
    OP
       2023-01-22 00:10:20 +08:00 via Android
    @me221 对的。但是限制仅限注册,所以建议服务器上部署来实现自动续期,或者发布一个私有的已经注册完成的 docker 实现

    @daiv acme.sh 还是会在你申请的服务器上创建定时任务,进行续期的,但是对于 action 这种每次都相当于新的服务器,需要重新注册,那就必须得换或者直接用注册好的 docker 镜像了
    bugfan
        24
    bugfan  
       2023-01-22 23:56:37 +08:00 via iPhone
    @siknet 哈哈 你看看 https://www.i996.me 里面的证书签发功能,只需要 2 步,就能帮你签好证书,支持房,域名证书,而且这个支持以文件夹方式下载和 http api 方式获取,方便你集成到自己程序里。如果你用 nginx 可以用文件夹方式获取,配置到计划任务就行了
    jonathon523
        25
    jonathon523  
    OP
       2023-01-23 08:40:46 +08:00 via Android
    @siknet acmesh 还是会在你申请的服务器上创建定时任务,进行续期的
    chancat
        26
    chancat  
       2023-01-23 12:41:09 +08:00 via Android
    谢谢分享,看看先
    blankmiss
        27
    blankmiss  
       2023-01-23 17:09:04 +08:00
    能签泛域名吗
    jonathon523
        28
    jonathon523  
    OP
       2023-01-23 18:29:14 +08:00 via Android
    @blankmiss 可以的
    elboble
        29
    elboble  
       2023-01-26 15:23:40 +08:00
    已经用上了,暂时没发现区别。

    对了,原来没用过 google 的云服务,这样算开了服务,会收费吗??
    jonathon523
        30
    jonathon523  
    OP
       2023-01-27 09:36:03 +08:00 via Android
    @elboble 这个是免费的,不会收费
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2748 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 06:41 PVG 14:41 LAX 22:41 JFK 01:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86