acme.sh

By | 2024年2月4日

介绍

​ ACME是”Automatic Certificate Management Environment”(自动证书管理环境)的缩写,它提供了一种标准化的方式,使能够自动请求、验证和获取证书,而无需人工干预。完成标准化获取证书流程需要ACME客户端与ACME服务器端进行通信。常见的ACME客户端有acme.sh、certbot等。

安装 acme.sh

# 1. 下载 acme.sh(下载位置:~/.acme.sh)
curl https://get.acme.sh | sh -s email=xxx@gmail.com

# 2. 检查自动更新 cronjob 是否已创建(执行完上面命令后,会自动创建 cronjob)
crontab -l
# 结果显示:49 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
# 解释说明:上面的 cron 表示每天 0:49 分,执行 acme.sh 以更新所有证书。

# 3. 申请泛域名证书
cd /root/.acme.sh
export Ali_Key="XXX";export Ali_Secret="YYY";./acme.sh --issue --dns dns_ali -d abc.com -d *.abc.com
# 说明:申请成功后,多出了一个目录 /root/.acme.sh/abc.com_ecc,里面存的是 cer 格式的证书。

# 4. cer 证书转 pkcs,用于 Tomcat
./acme.sh --toPkcs12 -d abc.com -d *.abc.com --ecc --password 12345678
# 执行完后,生成了一个新证书,位于 /root/.acme.sh/abc.com.pfx

在线 crontab 工具

主要浏览器已弃用 TLS 1.0 和 TLS 1.1

2020年初,主要的浏览器制造商:谷歌、苹果、微软和Mozilla,宣布弃用对TLS 1.0TLS 1.1的支持。之前配置 Tomcat 时就因这个问题卡了半天,以为是 acme.sh 生成的证书转 tomcat 证书上出了问题。这是有问题的 server.xml 配置:

    <Connector port="40102"
               protocol="org.apache.coyote.http11.Http11NioProtocol"
               SSLEnabled="true"
               scheme="https"
               secure="true"
               keystoreFile="/root/.acme.sh/abc.com_ecc/abc.com.pfx"
               keystorePass="eitercl6"
               clientAuth="false"
               SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
               ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>

问题出在 SSLProtocol=”TLSv1+TLSv1.1+TLSv1.2″ 这块,谷歌浏览器访问时直接出错了:

将 SSLProtocol=”TLSv1+TLSv1.1+TLSv1.2″ 改成 SSLProtocol=”TLSv1.2+TLSv1.3” 后问题解决。

另外再附上Nginx的 SSLProtocol 配置:

ssl_protocols TLSv1.2 TLSv1.3;

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注