主流的ACME客户端配置方式
- 设置acme域名,例如:ca.mydomain
- 添加根证书到操作系统或浏览器
- 添加DNS记录
- 参考如下方式配置WEB服务器
Certbot
Certbot 是所有ACME客户的起始。它由EFF构建和支持,是生产级ACME命令行的标准。
我们建议大多数人从 Certbot 客户端开始。 它既可以只为您获取证书,也可以帮助您获取并安装证书。 它易于使用,适用于许多操作系统,并且具有出色的文档。
如果 Certbot 不能满足您的需求,或者您只是想尝试其他软件,那么下面有更多的客户端可供选择,这些客户端按照编写所用的语言或是使用环境排序。
REQUESTS_CA_BUNDLE=${MY_CA_ROOT_DIR}/root_ca.crt \
certbot certonly -n --standalone -d foo.mydomain \
--server https://ca.mydomain/acme/acme/directory
因为需要完成http-01挑战,请确保certbot有侦听80端口的权限。如果您已经有一个正在运行的网络服务器,您可以改用webroot模式。同时,certbot还支持dns-01挑战。
您可以通过运行更新所有已安装的证书cerbot:
REQUESTS_CA_BUNDLE=${MY_CA_ROOT_DIR}/root_ca.crt certbot renew
您可以通过一个简单的条目自动续订cron,每日触发更新:
* * * 1/1 * ? root REQUESTS_CA_BUNDLE=${MY_CA_ROOT_DIR}/root_ca.crt certbot -q renew
某些Linux发行版的软件包certbot,会为您创建这样的cron条目或systemd计时器。您还需要将您的域名配置为仅在证书到期后一天内更新证书,方法是添加如下一行:
renew_before_expiry = 24 hours
acme.sh
acme.sh是另一个流行的命令行 ACME 客户端。它完全用 shell(bash、dash和sh兼容的)编写,几乎没有依赖性:
acme.sh --issue --standalone -d foo.mydomain \
--server https://ca.mydomain/acme/acme/directory \
--ca-bundle ${MY_CA_ROOT_DIR}/root_ca.crt \
--fullchain-file foo.crt \
--key-file foo.key
以合理的频率强制更新,例如每 8 小时一次,通过 cron:
0 */8 * * * root "/home/<user>/.acme.sh"/acme.sh --cron --home "/home/<user>/.acme.sh" --force > /dev/null
win-acme
win-acme ( wacs.exe) 是一个在 Windows 上流行的 ACME 客户端。 要使用win-acme,您需要执行以下操作:
更改settings.json中的端点配置为:https://ca.mydomain/acme/acme/ ,或者通过–baseuri进行设置。 建议使用tls-alpn-01质询类型来证明所有权。
Caddy
Caddy是一个 HTTP/2 网络服务器,具有由集成的 ACME 客户端提供支持的自动 HTTPS 。除了为静态网站提供服务外,Caddy 通常用作 TLS 网关代理。
这是一个Caddyfile配置示例,用以自动获取ca.mydomain证书:
{
email oa@myoffice.org
acme_ca https://ca.mydomain/acme/acme/directory
}
foo.mydomain
root * /var/www
tls oa@myoffice.org {
ca https://ca.mydomain/acme/acme/directory
}
Nginx
Nginx本身不支持 ACME,但您可以使用 Certbot 或 acme.sh 来获取 Nginx 使用的证书。
这是一个nginx.conf在常见配置中运行 Nginx 的示例::
server {
listen 443 ssl;
server_name foo.mydomain;
ssl_certificate /path/to/foo.crt;
ssl_certificate_key /path/to/foo.key;
location / {
proxy_pass http://127.0.0.1:8000
}
}
Nginx 仅在启动时读取一次证书。当您更新磁盘上的证书时,Nginx 不会注意到。每次续订后,您需要运行以下命令:
nginx -s reload
Apache
Apache httpd 通过mod_md集成了 ACME 支持。您可以采用类似于我们为 Nginx 所做的方式将证书部署到 Apache。
这是 Apache 配置示例:
<VirtualHost *:443>
ServerName foo.mydomain
DocumentRoot /home/mmalone/www
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/foo.mydomain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/foo.mydomain/privkey.pem
</VirtualHost>
与 Nginx 一样,Apache 需要在通过运行以下命令更新证书后发出信号:
apachectl graceful