本文以默认 CA ZeroSSL 为例,切换默认CA以及如何使用请参考 acme.sh Wiki
博主推荐使用 DNS 方式验证签发证书,简单快捷
安装 acme.sh
一键脚本
curl https://get.acme.sh | sh -s email=my@example.com
手动安装
如果是国内的机器,可以使用拖回源码直接安装:
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m my@example.com
请注意替换 my@example.com
为你自己的邮箱
安装完成后重新加载 Bash:
source ~/.bashrc
然后也可以开启自动更新:
acme.sh --upgrade --auto-upgrade
注册账号
acme.sh --register-account -m my@example.com --server zerossl
签发证书
使用 HTTP 验证签发证书
首先我们要做一下准备工作,假设你域名是 example.com
,解析到你的服务器让其生效后,我们建立一个目录:
mkdir -p /var/www/ZeroSSL
我们的目的是绑定 http://example.com/.well-known/acme-challenge
到这个目录。
如果您用的 Nginx,那么新建一个配置文件:
server {
listen 80;
listen [::]:80;
server_name example.com;
location /.well-known/acme-challenge {
root /var/www/ZeroSSL;
}
location / {
rewrite ^/(.*)$ https://$host/$1 permanent;
}
}
我们以 ZeroSSL 为例,直接在终端运行
acme.sh --issue -d example.com -w /var/www/ZeroSSL
如果希望签发 ECC 证书,则运行
acme.sh --issue -d example.com --keylength ec-256 -w /var/www/ZeroSSL
如果需要多个域名,则运行
acme.sh --issue -d example.com -d example.org -w /var/www/ZeroSSL
然后就等他执行完,直到出现 Cert success
的提示,然后我们可以安装证书
Nginx
acme.sh --install-cert -d example.com \
--cert-file /etc/nginx/certs/example.com/cert \
--key-file /etc/nginx/certs/example.com/key \
--fullchain-file /etc/nginx/certs/example.com/fullchain \
--reloadcmd "systemctl reload nginx.service"
对应的 Nginx 配置指定证书文件
ssl_certificate /etc/nginx/certs/example.com/cert;
ssl_certificate_key /etc/nginx/certs/example.com/key;
如果是 ECC 证书,则安装的时候需要带上 --ecc
参数,比如
acme.sh --install-cert --ecc -d example.com \
--cert-file /etc/nginx/certs/example.com/cert \
--key-file /etc/nginx/certs/example.com/key \
--fullchain-file /etc/nginx/certs/example.com/fullchain \
--reloadcmd "systemctl reload nginx.service"
注意如果是多个域名,也仅需要在 -d
参数后面指定第一个域名即可。
使用 DNS 验证签发证书
有时候因为不想暴露一些二级域名,或者希望在多台机器上部署同一个域名的证书,这时候就需要使用 DNS 签发证书了,acme.sh 支持几十种 DNS API。
这里以 Cloudflare 为例,登录 Cloudflare Dash 后在 API Token 菜单里添加一个 API Token
- 登录 Cloudflare 后在 API Token 菜单里添加一个 API Token
- 然后选择 Edit Zone DNS 的模板
- 选择你要编辑的域名,也可以加入你服务器的 IP 作为白名单
- 完成后复制显示的一串字符,需要填入下方的
CF_Token
参数 - 进入域名的管理页面,在右侧 API 列找到
Account ID
并复制
接着在终端运行
export CF_Token="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Account_ID="xxxxxxxxxxxxx"
然后开启 acme.sh 的 DNS API 模式申请证书
acme.sh --issue --dns dns_cf -d example.com
安装证书方法同上
版权属于:谁把年华错落成诗 所有,转载请注明出处!
本文链接:https://blog.pomears.com/archives/68.html
如果博客部分链接出现404,请留言或者联系博主修复。