Let'sEncrypt快速頒發(fā)及自動續(xù)簽泛域名證書實踐指南

[TOC]

0x00 前言簡述

描述: Let's Encrypt 是免費、開放和自動化的證書頒發(fā)機構由Linux基金會(Linux Foundation)進行日常管理維護等舔,它為1.8億個網(wǎng)站提供TLS證書的非盈利性證書頒發(fā)機構, 通過它我們可以免費申請網(wǎng)站證書,并您的網(wǎng)站上啟用 HTTPS (SSL/TLS) 提供支持。

WeiyiGeek.Let's Encrypt

前置需求:

  • 域名所有者 : Let’s Encrypt 是一個證書頒發(fā)機構(CA), 要從 Let’s Encrypt 獲取您網(wǎng)站域名的證書酝润,您必須證明您對域名的實際控制權。
  • ACME 協(xié)議軟件 : 在Let’s Encrypt 使用 ACME 協(xié)議來驗證您對給定域名的控制權并向您頒發(fā)證書, 要從Let’s Encrypt 獲得證書璃弄,您需要選擇一個要使用的 ACME 客戶端軟件要销。 例如官方推薦的客戶端 Certbot 、或者使用得最多的 acme.sh

參考來源
Let's Encrypt 網(wǎng)站: https://letsencrypt.org/
ACME 協(xié)議客戶端: https://letsencrypt.org/zh-cn/docs/client-options/
acme.sh WIKI: https://wiki.acme.sh
certbot Github: https://github.com/certbot/certbot

原文地址: https://blog.weiyigeek.top/2022/3-11-589.html


0x01 快速安裝配置

1.acme.sh

描述: 此處我們采用 acmesh-official 提供的 acme.sh 項目來快速搭建證書自動頒發(fā)夏块、續(xù)簽證書疏咐,其使用簡單、強大且非常易于使用脐供,它純粹用 Shell(Unix shell)語言編寫的 ACME 協(xié)議客戶端浑塞,安裝方式主要有二進制文件或者是acme.sh??碼頭工人(https://github.com/acmesh-official/acme.sh/wiki/Run-acme.sh-in-docker)。

溫馨提示: 簽發(fā)的證書有效期為60天政己,我們可以設置cron 作業(yè)以檢查和更新證書酌壕,通常證書將每60天自動更新一次。

快速安裝:
安裝參考地址: https://github.com/acmesh-official/acme.sh/wiki/How-to-install

# 從 git 安裝 acme
git clone https://github.com/acmesh-official/acme.sh.git && cd ./acme.sh
./acme.sh --install -m master@weiyigeek.top
  # [Thu 10 Mar 2022 02:23:16 PM CST] Installing to /root/.acme.sh
  # [Thu 10 Mar 2022 02:23:16 PM CST] Installed to /root/.acme.sh/acme.sh
  # [Thu 10 Mar 2022 02:23:16 PM CST] Installing alias to '/root/.bashrc'
  # [Thu 10 Mar 2022 02:23:16 PM CST] OK, Close and reopen your terminal to start using acme.sh
  # [Thu 10 Mar 2022 02:23:16 PM CST] Installing cron job
  # [Thu 10 Mar 2022 02:23:16 PM CST] Good, bash is found, so change the shebang to use bash as preferred.
  # [Thu 10 Mar 2022 02:23:17 PM CST] OK

# email環(huán)境變量 & 別名設置 
export email="master@weiyigeek.top"
alias acme.sh=~/.acme.sh/acme.sh

# 查看acme.sh版本
acme.sh --version
  # https://github.com/acmesh-official/acme.sh
  # v3.0.2

# 使用 letsencrypt 提供的默認CA,當然你也可以自己提供(PS: 白嫖免費歇由、誰不愛卵牍?)
acme.sh --set-default-ca --server letsencrypt
  # [Thu 10 Mar 2022 02:34:09 PM CST] Changed default CA to: https://acme-v02.api.letsencrypt.org/directory

至此,您現(xiàn)在可以發(fā)布證書了沦泌。


0x02 證書自動簽發(fā)實踐

1.acme.sh + Cloudflare 實現(xiàn)自動簽發(fā)泛域名證書糊昙。

Q: 什么是通配符證書?
A: 在沒有出現(xiàn)通配符證書之前,Let’s Encrypt 支持兩種單域名證書赦肃、SAN證書溅蛉。

1)單域名證書:證書僅僅包含一個主機。
2)SAN 證書:域名通配符證書類似 DNS 解析的泛域名概念他宛,通配符證書就是證書中可以包含一個通配符(*.exmaple.com)船侧。主域名簽發(fā)的通配符證書可以在所有子域名中使用,比如 www.example.com厅各、bbs.example.com镜撩。


申請通配符證書流程
步驟 01.如果您的 DNS 提供商支持 API 訪問,我們可以使用該 API 自動頒發(fā)證書队塘,目前 acme.sh 支持大多數(shù) dns 提供者(https://github.com/acmesh-official/acme.sh/wiki/dnsapi)袁梗,如果您的 dns 提供商不支持任何 api 訪問,您只能手動添加 txt 記錄憔古。

步驟 02.此處我已經(jīng)將 weiyigeek.top域名DNS解析商設置為 Cloudflare (免費)遮怜,其DNS提供上支持API訪問, 在使用 acme.sh 實現(xiàn)自動簽發(fā)證書前,我們需要再Cloudflare網(wǎng)站上獲取用于訪問 Cloudflare API 的密鑰鸿市,首先點擊我的個人資料 -> API 令牌锯梁。

WeiyiGeek.用于訪問 Cloudflare API 的密鑰

步驟 03.設置 acme.sh 用于訪問 Cloudflare 的 dnsapi 的相關環(huán)境變量即碗。

# 注意, 如下環(huán)境變量,你需要根據(jù)你自己注冊的 Cloudflare 郵箱地址(CF_Email)以及獲取的 Cloudflare API 密鑰(CF_Key)。
export CF_Email="dns@weiyigeek.top"
export CF_Key="be587222s8qa58asd87asd20b55a30cd653" 

步驟 04.執(zhí)行如下命令陌凳,可以實現(xiàn)自動頒發(fā)通配符&ECDSA格式證書剥懒,Let's Encrypt 支持頒發(fā) EC 格式證書,

acme.sh --issue --dns dns_cf -d weiyigeek.top -d *.weiyigeek.top --keylength ec-256
# --issue是 acme.sh 腳本用來頒發(fā)證書的指令合敦;
# -d是--domain的簡稱初橘,其后面須填寫已備案的域名;
# --keylength 證書格式;
  # [Thu 10 Mar 2022 02:37:27 PM CST] Using CA: https://acme-v02.api.letsencrypt.org/directory
  # [Thu 10 Mar 2022 02:37:27 PM CST] Create account key ok.
  # [Thu 10 Mar 2022 02:37:27 PM CST] Registering account: https://acme-v02.api.letsencrypt.org/directory
  # [Thu 10 Mar 2022 02:37:29 PM CST] Registered
  # [Thu 10 Mar 2022 02:37:29 PM CST] ACCOUNT_THUMBPRINT='3BKx-SF-zF1gbbkXpT9F4yfItz7V7JYKsPAkv8mxR2o'
  # [Thu 10 Mar 2022 02:37:29 PM CST] Creating domain key
  # [Thu 10 Mar 2022 02:37:29 PM CST] The domain key is here: /root/.acme.sh/weiyigeek.top_ecc/weiyigeek.top.key
  # [Thu 10 Mar 2022 02:37:29 PM CST] Multi domain='DNS:weiyigeek.top,DNS:*.weiyigeek.top'
  # [Thu 10 Mar 2022 02:37:29 PM CST] Getting domain auth token for each domain
  # [Thu 10 Mar 2022 02:37:33 PM CST] Getting webroot for domain='weiyigeek.top'
  # [Thu 10 Mar 2022 02:37:33 PM CST] Getting webroot for domain='*.weiyigeek.top'
  # [Thu 10 Mar 2022 02:37:33 PM CST] Adding txt value: iobyZpnA9bfxgM_tW_P8hjDye677KzjyQHClMka4Btw for domain:  _acme-challenge.weiyigeek.top
  # [Thu 10 Mar 2022 02:37:36 PM CST] Adding record
  # [Thu 10 Mar 2022 02:37:37 PM CST] Added, OK
  # [Thu 10 Mar 2022 02:37:37 PM CST] The txt record is added: Success.
  # [Thu 10 Mar 2022 02:37:37 PM CST] Adding txt value: NrksC2yEFDGFFMQ8_p76tAhdjWWWLkj1yKpTjUq4TcM for domain:  _acme-challenge.weiyigeek.top
  # [Thu 10 Mar 2022 02:37:40 PM CST] Adding record
  # [Thu 10 Mar 2022 02:37:41 PM CST] Added, OK
  # [Thu 10 Mar 2022 02:37:41 PM CST] The txt record is added: Success.
  # [Thu 10 Mar 2022 02:37:41 PM CST] Let's check each DNS record now. Sleep 20 seconds first.
  # [Thu 10 Mar 2022 02:38:02 PM CST] You can use '--dnssleep' to disable public dns checks.
  # [Thu 10 Mar 2022 02:38:02 PM CST] See: https://github.com/acmesh-official/acme.sh/wiki/dnscheck
  # [Thu 10 Mar 2022 02:38:02 PM CST] Checking weiyigeek.top for _acme-challenge.weiyigeek.top
  # [Thu 10 Mar 2022 02:38:03 PM CST] Domain weiyigeek.top '_acme-challenge.weiyigeek.top' success.
  # [Thu 10 Mar 2022 02:38:04 PM CST] Checking weiyigeek.top for _acme-challenge.weiyigeek.top
  # [Thu 10 Mar 2022 02:38:06 PM CST] Domain weiyigeek.top '_acme-challenge.weiyigeek.top' success.
  # [Thu 10 Mar 2022 02:38:06 PM CST] All success, let's return
  # [Thu 10 Mar 2022 02:38:06 PM CST] Verifying: weiyigeek.top
  # [Thu 10 Mar 2022 02:38:07 PM CST] Pending, The CA is processing your order, please just wait. (1/30)
  # [Thu 10 Mar 2022 02:38:11 PM CST] Success
  # [Thu 10 Mar 2022 02:38:11 PM CST] Verifying: *.weiyigeek.top
  # [Thu 10 Mar 2022 02:38:12 PM CST] Pending, The CA is processing your order, please just wait. (1/30)
  # [Thu 10 Mar 2022 02:38:16 PM CST] Success
  # [Thu 10 Mar 2022 02:38:16 PM CST] Removing DNS records.
  # [Thu 10 Mar 2022 02:38:16 PM CST] Removing txt: iobyZpnA9bfxgM_tW_P8hjDye677KzjyQHClMka4Btw for domain: _acme-challenge.weiyigeek.top
  # [Thu 10 Mar 2022 02:38:22 PM CST] Removed: Success
  # [Thu 10 Mar 2022 02:38:22 PM CST] Removing txt: NrksC2yEFDGFFMQ8_p76tAhdjWWWLkj1yKpTjUq4TcM for domain: _acme-challenge.weiyigeek.top
  # [Thu 10 Mar 2022 02:38:30 PM CST] Removed: Success
  # [Thu 10 Mar 2022 02:38:30 PM CST] Verify finished, start to sign.
  # [Thu 10 Mar 2022 02:38:30 PM CST] Lets finalize the order.
  # [Thu 10 Mar 2022 02:38:30 PM CST] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/444241360/70248671870'
  # [Thu 10 Mar 2022 02:38:31 PM CST] Downloading cert.
  # [Thu 10 Mar 2022 02:38:31 PM CST] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/03740b271962634e99cbcefe7b74351b952c'
  # [Thu 10 Mar 2022 02:38:32 PM CST] Cert success.
  # -----BEGIN CERTIFICATE-----
  # MIIEZTCCA02gAwIBAgISA3QLJxliY06Zy87+e3Q1G5UsMA0GCSqGSIb3DQEBCwUA
  # .................................
  # jvhX8eE7xRHgXppOwoEPdbZ29uSJWUD9yQ==
  # -----END CERTIFICATE-----
  # [Thu 10 Mar 2022 02:38:32 PM CST] Your cert is in: /root/.acme.sh/weiyigeek.top_ecc/weiyigeek.top.cer
  # [Thu 10 Mar 2022 02:38:32 PM CST] Your cert key is in: /root/.acme.sh/weiyigeek.top_ecc/weiyigeek.top.key
  # [Thu 10 Mar 2022 02:38:32 PM CST] The intermediate CA cert is in: /root/.acme.sh/weiyigeek.top_ecc/ca.cer
  # [Thu 10 Mar 2022 02:38:32 PM CST] And the full chain certs is there: /root/.acme.sh/weiyigeek.top_ecc/fullchain.cer

步驟 05.利用openssl查看頒發(fā)的CA及其證書充岛。

$  acme.sh list
Main_Domain    KeyLength  SAN_Domains      CA               Created                          Renew
weiyigeek.top  "ec-256"   *.weiyigeek.top  LetsEncrypt.org  Thu 10 Mar 2022 06:38:32 AM UTC  Mon 09 May 2022 06:38:32 AM UTC

$ openssl x509 -in ca.cer -noout -text
  # X509v3 extensions:
  #   X509v3 Key Usage: critical
  #       Digital Signature, Certificate Sign, CRL Sign
  #   X509v3 Extended Key Usage:
  #       TLS Web Client Authentication, TLS Web Server Authentication
  #   X509v3 Basic Constraints: critical
  #       CA:TRUE, pathlen:0
  #   X509v3 Subject Key Identifier:
  #       14:2E:B3:17:B7:58:56:CB:AE:50:09:40:E6:1F:AF:9D:8B:14:C2:C6
  #   X509v3 Authority Key Identifier:
  #       keyid:79:B4:59:E6:7B:B6:E5:E4:01:73:80:08:88:C8:1A:58:F6:E9:9B:6E

  #   Authority Information Access:
  #       CA Issuers - URI:http://x1.i.lencr.org/

  #   X509v3 CRL Distribution Points:

  #       Full Name:
  #         URI:http://x1.c.lencr.org/

  #   X509v3 Certificate Policies:
  #       Policy: 2.23.140.1.2.1
  #       Policy: 1.3.6.1.4.1.44947.1.1.1

$ openssl x509 -in ca.cer -noout -text
$ openssl x509 -in weiyigeek.top.cer -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            03:74:0b:27:19:62:63:4e:99:cb:ce:fe:7b:74:35:1b:95:2c
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = Let's Encrypt, CN = R3
        Validity
            Not Before: Mar 10 05:38:30 2022 GMT
            Not After : Jun  8 05:38:29 2022 GMT

步驟 06.使用簽發(fā)的證書保檐,ingress為指定主機名稱設置tls, 然后通過瀏覽器訪問 https://demo.weiyigeek.top 站點,驗證tls配置是否正常崔梗。

# 1.創(chuàng)建一個tls類型的secret 展东,并使用--cert指定證書文件,--key指定證書密鑰
kubectl create secret tls wildcard-weiyigeek-top --cert=weiyigeek.top.cer --key=weiyigeek.top.key -n devtest

# 2.分別為兩個虛擬主機分別配置tls炒俱,需要再sepc字段下進行如下配置(注意縮進)
$ kubectl edit ingress -n devtest demo-myweb-blog
spec:
  tls:
  - hosts:
      - demo.weiyigeek.top
    secretName: wildcard-weiyigeek-top
WeiyiGeek.驗證TLS配置服務

步驟 07.于此同時我們還可,修改 Nginx 配置文件啟用 ssl爪膊,記得修改完成后需要重啟下 Nginx权悟。

# 在 Nginx 主機上一條命令解決, 如果是 ECDHE 格式需要加上 --ecc 參數(shù)
acme.sh  --installcert -d weiyigeek.top \
  --ecc \ 
  --key-file /etc/nginx/ssl/weiyigeek.top.key \
  --fullchain-file /etc/nginx/ssl/fullchain.cer \
  --reloadcmd "service nginx force-reload"

# nginx.conf 的配置參考:    
server {
  listen 443 ssl;
  server_name weiyigeek.top;

  ssl on;
  ssl_certificate      /etc/nginx/ssl/fullchain.cer;
  ssl_certificate_key  /etc/nginx/ssl/weiyigeek.top.key;

  root /home/wwwroot/weiyigeek.top;
  index index.html;

  location / {
    try_files $uri $uri/ @router;
    index index.html;
  }

  location @router {
    rewrite ^.*$ /index.html last;
  }
}
  
server {
    listen 80;
    server_name weiyigeek.top;
    return 301 https://$server_name$request_uri;
}

溫馨提示: Nginx 的配置 ssl_certificate 和 ssl_trusted_certificate 使用 fullchain.cer ,而非<domain>.cer推盛,否則 SSL Labs 的測試會報 Chain issues Incomplete 錯誤

步驟 08.創(chuàng)建 cron 作業(yè)以檢查和更新證書峦阁,添加force參數(shù)60天后強制更新。

20 0 */60 * * /root/.acme.sh/acme.sh --cron --force --home "/root/.acme.sh" > /dev/null

0x03 使用實例

1.簡單示例

# 0.注冊用戶
acme.sh --register-account -m tls@weiyigeek.top

# 1.頒發(fā)單域&多域證書(注意設置DNS指向)為其頒發(fā)證書的主機耘成,您必須將所有域指向并綁定到同一個 webroot dir (/home/wwwroot/example.com).
acme.sh --issue -d example.com -w /home/wwwroot/example.com
acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com

# 2.證書生成后利用acme.sh提供的--install-cert選項我們可以直接將證書安裝到 Apache/Nginx/Proxmox 服務榔昔。
# - Apache example:
# --installcert命令,指定目標位置瘪菌,然后證書文件會被 copy 到相應的位置撒会。
acme.sh --install-cert -d example.com \
--cert-file      /path/to/certfile/in/apache/cert.pem  \
--key-file       /path/to/keyfile/in/apache/key.pem  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "service apache2 force-reload"

# Nginx example:
acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"
# Proxmox example:
/root/.acme.sh/acme.sh --installcert -d example.com \
--certpath /etc/pve/local/pveproxy-ssl.pem \
--keypath /etc/pve/local/pveproxy-ssl.key  \
--capath  /etc/pve/local/pveproxy-ssl.pem  \
--reloadcmd  "systemctl restart pveproxy"

# 3.使用獨立服務器頒發(fā)證書,端口80(TCP)必須可以自由監(jiān)聽师妙,否則系統(tǒng)會提示您釋放它并重試诵肛。
acme.sh --issue --standalone -d example.com -d www.example.com -d cp.example.com

# 4.使用獨立的ssl服務器頒發(fā)證書,端口443(TCP)必須可以自由監(jiān)聽默穴,否則系統(tǒng)會提示您釋放它并重試怔檩。
acme.sh --issue --alpn -d example.com -d www.example.com -d cp.example.com

# 5.dns手動模式,簽發(fā)證書時,如果您的 dns 提供商不支持任何 api 訪問蓄诽,使用--dns會填寫需要添加的txt記錄薛训,此時您可以手動添加 txt 記錄
acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com

# 6.頒發(fā)ECC證書 (ECDSA),只需keylength使用前綴設置參數(shù)ec-。
# - 單域ECC證書
acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256
# - SAN多域ECC證書
acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256

# 7.頒發(fā)通配符證書非常的簡單,你只需要給一個通配符域作為-d參數(shù)仑氛。
acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf --keylength ec-256

# 8.檢查證書到期時間
acme.sh --cron --home ~/.acme.sh/
  # [Thu 10 Mar 2022 04:15:54 PM CST] ===Starting cron===
  # [Thu 10 Mar 2022 04:15:54 PM CST] Renew: 'weiyigeek.top'
  # [Thu 10 Mar 2022 04:15:54 PM CST] Skip, Next renewal time is: Mon 09 May 2022 06:38:32 AM UTC
  # [Thu 10 Mar 2022 04:15:54 PM CST] Add '--force' to force to renew.
  # [Thu 10 Mar 2022 04:15:54 PM CST] Skipped weiyigeek.top_ecc
  # [Thu 10 Mar 2022 04:15:54 PM CST] ===End cron===

# 9.重新申請簽發(fā)證書, 設置定時任務后所有證書將每60天自動更新一次乙埃,當然您也可以強制更新證書:
acme.sh --renew -d example.com --force [--ecc]  # ecc 參數(shù), 表明只是針對頒發(fā)的ECC證書闸英。
acme.sh --renew -d example.com --force 

# 10.停止更新證書,您可以執(zhí)行以下操作從更新列表中刪除證書:
acme.sh --remove -d example.com [--ecc]  # 注意, 證書/密鑰文件不會從磁盤中刪除膊爪。

# 11.啟用自動升級保持acme.sh為最新版本自阱,禁用自動更新。
acme.sh --upgrade --auto-upgrade
acme.sh --upgrade --auto-upgrade 0


# 12.查看證書列表
acme.sh --list 

# 13.刪除證書
acme.sh remove <SAN_Domains>


2.擴展補充

Q: 將默認 CA 更改為 ZeroSSL?
A: 通常情況下acme.sh使用letsencrypt作為默認CA, 當前可以將默認CA更改為 ZeroSSL(https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA)米酬,但實際上并不建議這樣做沛豌,因為,Let's Encrypt 可以頒發(fā) EC 證書赃额,而 ZeroSSL.com 則不支持頒發(fā)加派。


Q: 如何頒發(fā)包含多個域的單個證書,每個域使用不同的驗證方法多域跳芳、SAN模式芍锦、Hybrid模式

$ acme.sh  --issue  \
-d aa.com  -w /home/wwwroot/aa.com \
-d bb.com  --dns dns_cf \
-d cc.com  --apache \
-d dd.com  -w /home/wwwroot/dd.com


Q: 如何生成pkcs12(pfx) 格式證書?

A: 頒發(fā)證書后可使用toPkcs命令將證書轉換為 pkcs12(pfx) 格式飞盆,執(zhí)行 acme.sh --toPkcs -d example.com [--password pfx-password] 命令即可娄琉。


Q: 如何從從現(xiàn)有 CSR 頒發(fā)證書?

A: 從 v2.4.4 開始,acme.sh 支持從現(xiàn)有 csr 頒發(fā)證書, 具體操作如下所示:

# 顯示 csr 中的主題和域名吓歇。
acme.sh --showcsr --csr /path/to/mycsr.csr

# 本地web root目錄驗證
acme.sh --signcsr --csr /path/to/mycsr.csr -w /path/to/webroot/

# DNS TXT 解析驗證
acme.sh --signcsr --csr /path/to/mycsr/csr --dns dns_cf


Q: 如何進行證書簽發(fā)通知?
A: acme.sh 可以在 cronjob 中發(fā)送通知, 通知可以是電子郵件或任何其他支持的方式孽水,例如請求 webhook 等, 參考地址:https://github.com/acmesh-official/acme.sh/wiki/notify

# 1.郵件通知
export MAIL_FROM="xxx@xxx.com" # or "Xxx Xxx <xxx@xxx.com>", currently works only with sendmail
export MAIL_TO="xxx@xxx.com"   # your account e-mail will be used as default if available
acme.sh --set-notify  --notify-hook mailgun  --notify-hook mail  \
  --notify-level 2 \
  --notify-mode 0

# 2.設置釘釘通知(釘釘),通過群機器人 webhook api 向釘釘群推送通知, 能力開通 https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
export DINGTALK_WEBHOOK='https://oapi.dingtalk.com/robot/send?access_token=b05ccexxxxx'
export DINGTALK_KEYWORD=acme
acme.sh  --set-notify  --notify-hook dingtalk

# 3. QQ with self-built CQHTTP API, 通過 CoolQ 的插件 CQHTTP 將消息推送到 QQ, 需要您自行部署 CQHTTP 服務端.
# 四個環(huán)境變量可供傳入:
* CQHTTP_TOKEN: 建議非空城看,將 CQHTTP 配置文件中您設置的 Access Token 填入女气。
* CQHTTP_USER: 必需,接收推送通知的 QQ 號碼测柠。您需要自行保證機器人號碼可以向接收者的 QQ 號碼發(fā)送消息炼鞠。
* CQHTTP_APIROOT: 必需,您搭建的 CQHTTP 服務器的 URL (不包含斜杠結尾)轰胁。
* CQHTTP_CUSTOM_MSGHEAD: 可選谒主,自定義的消息開頭。默認值是 "A message from acme.sh:".

export CQHTTP_TOKEN="Itsjustat0ken,qwq"       # That's the access token
export CQHTTP_USER="10086"     # That's your QQ number (receiver)
export CQHTTP_APIROOT="http://cqhttp-server.local:5700"     # That's your server address
acme.sh  --set-notify  --notify-hook cqhttp


Q: acme.sh 除了支持Cloudflare還支持那些DNSAPI供應商
描述: acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等數(shù)十種解析商的自動集成赃阀。

  • 使用萬網(wǎng)/阿里云的 NDS 解析操作方法:點擊右上角頭像 -> 選擇 AccessKey -> 點擊開始使用子用戶 AccessKey -> 起個自定義名稱 -> 搜索 NDS -> 選擇 系統(tǒng) AliyunDNSFullAccess
# 1.阿里云 --dns dns_ali 瘩将,獲取阿里云的DNS API key,首先開通阿里云AccessKeys子賬戶凹耙,復制這里的AccessKeyID和AccessKeySecert值姿现。
export Ali_Key="YourKey" 
export Ali_Secret="YourSecert"
  • 使用的是 DNSPod 解析服務,那就登錄 DNSPod 官網(wǎng)生肖抱,成所需的 api id 和 api key, 操作方法點擊右上角頭像 -> 我的賬號 -> 賬號中心 -> 密鑰管理 -> 創(chuàng)建密鑰
# 2.DNSPod --dns dns_dp
export DP_Id="YourID"
export DP_Key="YourKey"


安裝部署RSA备典、ECC雙證書(使用DNSPod API)

#!/bin/sh
DOMAIN="example.com"            # 域名
CERT_FOLDER="/etc/nginx/certs"  # 證書存放的目錄,結尾不能是"/"字符
export DP_Id="123456AbCdEfGh1234567890"           # DNSPod用戶賬戶
export DP_Key="aBcDEfGhHiJkLmNOpQrStUvWxYz234"    # DNSPod用戶密鑰

# 申請RSA證書
acme.sh --issue -d ${DOMAIN} -d *.${DOMAIN} --dns dns_dp --dnssleep 30 --ocsp --days 60 --keylength 2048
# 申請ECC證書
acme.sh --issue -d ${DOMAIN} -d *.${DOMAIN} --dns dns_dp --dnssleep 30 --ocsp --days 60 --keylength ec-256

# 創(chuàng)建證書安裝所需要的目錄
mkdir ${CERT_FOLDER}/{rsa,ecc}

# 安裝RSA證書
acme.sh --install-cert -d ${DOMAIN}                         \
        --cert-file       ${CERT_FOLDER}/rsa/cert.pem       \
        --key-file        ${CERT_FOLDER}/rsa/key.pem        \
        --fullchain-file  ${CERT_FOLDER}/rsa/fullchain.pem  \
        --reloadcmd       "systemctl restart nginx"

# 安裝ECC證書
acme.sh --install-cert -d ${DOMAIN} --ecc                   \
        --cert-file       ${CERT_FOLDER}/ecc/cert.pem       \
        --key-file        ${CERT_FOLDER}/ecc/key.pem        \
        --fullchain-file  ${CERT_FOLDER}/ecc/fullchain.pem  \
        --reloadcmd       "systemctl restart nginx"


0x04 入坑出坑

1.Cloudflare 的API 不技持 .cf, .ga, .gq, .ml, or .tk 的域名申請證書

  • 錯誤信息:
"errors": [{
  "code": 1038,
  "message": "You cannot use this API for domains with a .cf, .ga, .gq, .ml, or .tk TLD (top-level domain). To configure the DNS settings for this domain, use the Cloudflare Dashboard."
}],
  • 解決辦法: 不能自動申請則只能WEB頁面上進行申請意述。


0x04 其它參考

書寫不易提佣,如果您覺得這個專欄還不錯的吮蛹,請給這篇專欄 【點個贊、投個幣拌屏、收個藏潮针、關個注,轉個發(fā)】(人間五大情)倚喂,這將對我的肯定每篷,謝謝支持!(?′?‵?) ?

本文章來源 我的Blog站點WeiyiGeek 公眾賬號 以及 我的BiliBili專欄 (技術交流端圈、友鏈交換請郵我喲),
歡迎各位志同道合的朋友一起學習交流焦读,如文章有誤請留下您寶貴的知識建議,通過郵箱【master#weiyigeek.top】聯(lián)系我喲舱权!

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
禁止轉載矗晃,如需轉載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末宴倍,一起剝皮案震驚了整個濱河市张症,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸵贬,老刑警劉巖吠冤,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恭理,居然都是意外死亡,警方通過查閱死者的電腦和手機郭变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門颜价,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诉濒,你說我怎么就攤上這事周伦。” “怎么了未荒?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵专挪,是天一觀的道長。 經(jīng)常有香客問我片排,道長寨腔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任率寡,我火速辦了婚禮迫卢,結果婚禮上,老公的妹妹穿的比我還像新娘冶共。我一直安慰自己乾蛤,他們只是感情好每界,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著家卖,像睡著了一般眨层。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上上荡,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天趴樱,我揣著相機與錄音,去河邊找鬼榛臼。 笑死伊佃,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的沛善。 我是一名探鬼主播航揉,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼金刁!你這毒婦竟也來了帅涂?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤尤蛮,失蹤者是張志新(化名)和其女友劉穎媳友,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體产捞,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡醇锚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了坯临。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焊唬。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖看靠,靈堂內(nèi)的尸體忽然破棺而出赶促,到底是詐尸還是另有隱情,我是刑警寧澤挟炬,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布鸥滨,位于F島的核電站,受9級特大地震影響谤祖,放射性物質發(fā)生泄漏婿滓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一粥喜、第九天 我趴在偏房一處隱蔽的房頂上張望空幻。 院中可真熱鬧,春花似錦容客、人聲如沸秕铛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春渔嚷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绽快。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留紧阔,地道東北人坊罢。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像擅耽,于是被迫代替她去往敵國和親活孩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容