技术指南

主流的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