acme.sh 自签证书

-
-
2023-02-22

Created:     2023-02-22 17:21     Modified:     2025-01-06 11:24

 

 

0x01 准备 

 

用法:

mkdir -pm 0700 "/{etc,var/log}/acme.sh"
add LOG_FILE='/var/log/acme.sh/acme.sh.log'
acme.sh --home /etc/acme.sh command ...[parameters]....

或者写个alias acme.sh="acme.sh --home /etc/acme.sh" # 需要root用户执行而不是sudo

第一次使用需要配置账号信息

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

目前 acme.sh 支持 5 个正式环境 CA,分别是 Let's EncryptBuypassZeroSSLSSL.comGoogle Public CA,默认使用 ZeroSSL,如果需要更换可以使用如下命令:

切换 Let's Encrypt

acme.sh --set-default-ca --server letsencrypt

切换 Buypass

acme.sh --set-default-ca --server buypass

切换 ZeroSSL

acme.sh --set-default-ca --server zerossl

切换 SSL.com

acme.sh --set-default-ca --server ssl.com

切换 Google Public CA

acme.sh --set-default-ca --server google

几个 CA 的简单对比

功能LEBuypassZeroSSLSSL.comGoogle Public CA
有效期90 天180 天90 天90 天90 天
多域名支持支持,最多 5 个支持收费支持支持
泛域名支持不支持支持收费支持支持
Rate Limit收费无未知
GUI 管理
ECC 证书链未知
客户支持社区收费收费收费收费

简单来说,如果没有特殊需求,可以选择 Let's Encrypt,如果服务器在国内,可以选择 ZeroSSL 或 Buypass,如果愿意付费得到更好的服务和保障,可以选择 ZeroSSL 和 SSL.com,如果面向欧盟用户,可以选择 Buypass 和 ZeroSSL。

注意:经过测试 Google Public CA 的 ACME 验证域名在国内是无法访问的,只有国外服务器才可以申请,申请完成后的证书并无影响。


0x02 签发证书

Webroot mode:

acme.sh  --issue  -d ‘example.com‘  -w /home/wwwroot/example.com

Apache / Nginx mode:

acme.sh  --issue  -d ‘example.com‘  --nginx   # Nginx
acme.sh  --issue  -d ‘example.com‘  --nginx /etc/nginx/conf.d/example.com.conf  # 或指定网站的conf

Standalone mode:

# http模式
acme.sh  --issue  -d ‘example.com‘  --standalone。
acme.sh  --issue  -d ‘example.com‘  --standalone --httpport 88 #也可以指定端口
# tls模式
acme.sh  --issue  -d ‘example.com‘  --alpn
acme.sh  --issue  -d ‘example.com‘  --alpn --tlsport 8443  # 也可以指定端口

DNS API mode:

# Cloudfare的Token在这里获得,Account_ID在管理页下方。

export CF_Token="xxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxx"
acme.sh --issue --dns dns_cf -d ‘example.com’ 

配置信息会保存在/etc/.acme.sh/account.conf

DNS manual mode:

# 如果域名服务商没有提供api,也可以通过添加TXT记录验证
acme.sh  --issue  -d ‘example.com‘  --dns  -d ‘www.example.com‘

多域名签发:

acme.sh  --issue  -d ‘example.com‘  --standalone  -d ‘www.example.com‘ # 只需要在验证方式之后添加多个 -d <YourDomainHere> 参数

泛域名配置:

acme.sh  --issue -d ‘example.com‘  -d '*.example.com'  --dns dns_cf

签发 ECC 证书:

acme.sh --issue -w /home/wwwroot/example.com -d ’example.com‘ -d ‘www.example.com‘ --keylength ec-256  # 多域名

0x03 安装配置:

安装证书:

acme.sh --installcert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "systemctl restart nginx"

配置nginx:

server {
    server_name example.com;
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    # ...    
    # ssl 相关配置
    ssl_certificate /etc/nginx/ssl/example.com.fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers '[ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305|ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305]:ECDHE+AES128:RSA+AES128:ECDHE+AES256:RSA+AES256:ECDHE+3DES:RSA+3DES';
    ssl_prefer_server_ciphers on;

    # ...
}

0x04 后事

更新证书:

acme.sh --renew -d example.com --force  (--ecc)

查看证书列表

acme.sh --list

停止更新

acme.sh --remove -d example.com (--ecc)

0x05 跋

如何查看证书有效期

openssl x509 -in signed.crt -noout -dates # -in 传入文件路径

证书格式转换

施工中. . .

 

 

 

 

 

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录