背景介绍

在HTTPS证书管理中,RSA私钥因其广泛兼容性和成熟算法体系,仍是许多企业的首选。与ECC密钥相比,RSA在老旧设备支持、中间件兼容性方面有明显优势,但同时也面临密钥管理复杂、性能开销较大等挑战。acme.sh作为轻量级ACME协议客户端,通过纯Shell实现,特别适合自动化部署场景。

证书管理示意图

技术选型对比

  • Certbot:依赖Python环境,默认使用ECC密钥,RSA支持需显式配置
  • acme.sh
  • 零依赖,单文件部署
  • 原生支持RSA密钥生成
  • 更精细的证书生命周期控制
  • 内置DNS API支持超过100种服务商

核心实现

1. 安装与配置

# 一键安装(默认安装到~/.acme.sh/)
curl https://get.acme.sh | sh

# 设置默认CA为Let's Encrypt
alias acme.sh=~/.acme.sh/acme.sh
acme.sh --set-default-ca --server letsencrypt

2. 生成RSA私钥证书

# 生成4096位RSA密钥并申请证书(HTTP验证方式)
acme.sh --issue -d example.com --keylength 4096 \
        --standalone --force

关键参数说明: - --keylength:指定RSA密钥长度(默认2048) - --standalone:使用独立Web服务器验证 - --force:强制重新生成密钥

3. 自动续期配置

# 证书安装到Nginx目录(自动创建cronjob)
acme.sh --install-cert -d example.com \
        --key-file /etc/nginx/ssl/example.com.key \
        --fullchain-file /etc/nginx/ssl/fullchain.cer \
        --reloadcmd "systemctl reload nginx"

生产环境最佳实践

密钥长度选择

| 密钥长度 | 安全性 | CPU开销 | 适用场景 | |----------|--------|---------|-------------------| | 2048 | 高 | 低 | 通用Web服务 | | 3072 | 更高 | 中 | 金融/政务系统 | | 4096 | 极高 | 高 | 长期证书(3年以上)|

私钥安全存储

  1. 生成后立即设置600权限:
    chmod 600 /etc/nginx/ssl/example.com.key
  2. 使用内存文件系统存储密钥:
    mount -t tmpfs -o size=1M tmpfs /etc/nginx/ssl/
  3. 禁止Shell历史记录存储敏感命令:
    unset HISTFILE

密钥存储示意图

避坑指南

常见错误处理

  • 错误Create new order error
  • 原因:ACME账户未正确注册
  • 解决:acme.sh --register-account -m your@email.com

  • 错误Verify error:Invalid response from

  • 原因:HTTP验证端口被占用
  • 解决:临时关闭Web服务或改用DNS验证

证书链验证

# 验证证书链完整性
openssl verify -CAfile fullchain.cer domain.cer

# 检查证书有效期
acme.sh --info -d example.com | grep -E 'Le_Cert|Le_Key'

自动化部署示例

#!/bin/bash
DOMAIN=example.com
EMAIL=admin@example.com

# 安装acme.sh
if [ ! -d ~/.acme.sh ]; then
  curl https://get.acme.sh | sh -s email=$EMAIL
fi

# 申请证书
~/.acme.sh/acme.sh --issue -d $DOMAIN \
  --dns dns_cf \
  --keylength 4096 \
  --dnssleep 30  # Cloudflare传播等待

# 部署证书
~/.acme.sh/acme.sh --install-cert -d $DOMAIN \
  --key-file /etc/ssl/private/$DOMAIN.key \
  --fullchain-file /etc/ssl/certs/$DOMAIN.pem \
  --reloadcmd "systemctl reload haproxy"

# 日志记录
echo "$(date) - Cert renewed for $DOMAIN" >> /var/log/acme.log

性能测试数据

使用ab测试不同密钥长度的TLS握手性能(单核CPU):

# 2048位密钥
Requests per second: 483.12

# 4096位密钥
Requests per second: 217.45

总结建议

  1. 对于动态扩展的云环境,建议将acme.sh集成到初始化脚本中
  2. 通过HashiCorp Vault等工具实现密钥集中管理
  3. 监控证书过期时间(acme.sh内置--cron
  4. 考虑使用OCSP Stapling提升验证性能

通过合理配置,acme.sh可以成为RSA证书管理的瑞士军刀,特别适合需要兼顾安全性与兼容性的企业环境。

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐