Nginx 使用 acme.sh 配置 SSL 证书

使用 acme.sh 快速部署 SSL 证书并设置自动续期, 不再担心因证书过期网站被提示风险= ̄ω ̄=

0%

简单了解

  • Shell语言编写的ACME协议客户端.
  • 一个脚本即可自动颁发,续订和安装证书.
  • 支持在Docker内使用,且支持IPv6.

安装脚本

curl https://get.acme.sh | sh -s email=<你的邮箱>

PS: 这里不使用--standalone模式生成证书, 直接忽略警告即可.
PPS: -s email=<你的邮箱> 不用加也可以运行, 但推荐加会更好.

测试命令

重新进入下终端(输入bashzsh)刷新下环境变量, 然后输入acme.sh命令测试, 正常输出即可.

PS: 如提示无相应命令则进入 ~/.acme.sh 目录下, 使用路径执行./acme.sh


下文使用 memos.owq.world 域名进行演示, 配置时注意替换成自己的域名.

配置Nginx转发

相关资料 -> Nginx 安装升级教程

使用nginx模式生成证书, 添加域名的80端口配置, 示例配置如下:

server {
listen 80;
server_name memos.owq.world;
}

Nginx模式生成证书

acme.sh --issue --nginx -d memos.owq.world

最后会出现证书的私钥和认证文件输出.


使用 SSL.com 生成证书

适用证书认证失败的情况, 默认的服务商生成的证书会有些第三方服务认证不通过, 这时候换一个服务商生成一般就解决了.

  • 进入 https://www.ssl.com/ 注册账户

  • 进入API管理页面

  • 获取对应ACME KeyHMAC Key

  • 设置登录

    acme.sh --register-account --server ssl.com -m me@email.com \
    --eab-kid <ACME Key> --eab-hmac-key <HMAC Key>
  • 生成证书

    acme.sh --server ssl.com --issue --nginx -d memos.owq.world

查看证书信息

acme.sh --info -d memos.owq.world

修改CA

如果生成失败, 类似下图, 可以尝试修改CA发布机构后重试.

acme.sh --set-default-ca  --server letsencrypt
acme.sh --set-default-ca --server zerossl # 这是默认的CA

自动续期证书

创建存放证书目录, 注意Nginx根目录要对应上.

mkdir -p /usr/local/nginx/certs/memos.owq.world

配置Nginx SSL转发, 替换证书中memos.owq.world域名即可.

# HTTPS server
server {
listen 443 ssl;
server_name memos.owq.world;

ssl_certificate certs/memos.owq.world/fullchain.cer;
ssl_certificate_key certs/memos.owq.world/cert.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

# 根据网站配置
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass http://127.0.0.1;
}
}

然后配置acme.sh, 注意--reloadcmdnginx重启命令, 每次续期证书后都会重启更新配置.

acme.sh --install-cert -d memos.owq.world \
--key-file /usr/local/nginx/certs/memos.owq.world/cert.key \
--fullchain-file /usr/local/nginx/certs/memos.owq.world/fullchain.cer \
--reloadcmd "service nginx force-reload"

或者使用变量, 快速修改运行命令.

export domain_name='memos.owq.world' certs_dir=/usr/local/nginx/certs && acme.sh --install-cert -d $domain_name \
--key-file $certs_dir/$domain_name/cert.key \
--fullchain-file $certs_dir/$domain_name/fullchain.cer \
--reloadcmd "service nginx force-reload"

这时候看看证书存放目录, acme.sh已经把文件移动过来并重命名了.

查看计划任务

crontab -l

acme.sh会创建了一条续期任务, 每次执行会续期配置中的证书, 默认是每30天续期一次, 每一次是续期3个月.

30 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

PS: 注意检查crontab服务是否正常运行哦

疑难杂症

  • 重新生成新的证书时, 要先删除 /root/.acme.sh/域名 证书文件夹.
  • 生成失败时, 注意检查Nginx配置是否正确, 确保只有80端口的配置, 再去运行生成.
  • 一般问题都能谷歌到, 谷歌不到的 -> 删除 ~/.acme.sh 目录, 重新安装一下, 邮箱注意变换, 这能解决大多数问题.

https://github.com/acmesh-official/acme.sh/wiki

https://github.com/acmesh-official/acme.sh/wiki/SSL.com-CA

------------ 已触及底线了 感谢您的阅读 ------------
  • 本文作者: OWQ
  • 本文链接: https://www.owq.world/7a1dd44c/
  • 版权声明: 本站所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处( ̄︶ ̄)↗