部署 ACME签发 MeteorCat 2023-09-29 2025-12-05
确保域名已经指向服务器IP, 如果采用 CloudFlare 等 CDN 隐藏真实IP地址需要先关闭.
初始化安装 这里用 root 权限来挂起这些服务, 主要是方便直接一键处理, 具体正式环境的实际最好创建低权限账号来调用.
首先是官方脚本安装, 输入以下命令行:
1 2 sudo apt install -y socat curl # 安装网络请求软件 sudo curl https://get.acme.sh | sh # 下载并安装 acme 脚本
sudo 代表使用最高权限安装, 会在生成的应用配置软件会在其家目录之中, 这也就是提到的可能涉及安全的点.
所有操作步骤没报错的时候, 就可以进行下一步配置命令:
1 2 acme.sh --set-default-ca --server letsencrypt # 切换证书源为 letsencrypt 而非 zerossl( zerossl需要邮箱认证 ) acme.sh --upgrade --auto-upgrade # 设置自动升级更新
这一步还是比较重要的, 新版本的 acme 里面默认配置 ZeroSSL 服务器作为证书服务器, ZeroSSL 是需要邮件手动去认证的, 很可能按照老版本操作过程没办法申请证书.
证书认证 默认的有的认证方式:
HTTP认证, 会在访问 HTTP:80(要求必须已经开放80端口服务) 访问目录生成一个 .wellxxxx 的文件夹提供认证.
DNS认证, 需要在域名解析商手动添加一条 TXT 的解析记录认证, 比较繁琐.
这里假设已经申请的域名为 demo.example.com, 首先申请证书输入以下命令:
1 2 # 类似于命令: acme.sh --issue -d <域名> --webroot <网站根目录> --nginx /etc/nginx/nginx.conf acme.sh --issue -d demo.example.com --webroot /data/www/demo --nginx /etc/nginx/nginx.conf
这里会在网站根目录生成一个 .wellxxxx 的文件夹提供给证书服务商确认域名归属, 当出现以下字样代表成功认证:
1 2 3 4 5 [Mon Dec 6 14:36:36 CST 2021] Your cert is in: /root/.acme.sh/demo.example.com/demo.example.com.cer [Mon Dec 6 14:36:36 CST 2021] Your cert key is in: /root/.acme.sh/demo.example.com/demo.example.com.key [Mon Dec 6 14:36:36 CST 2021] The intermediate CA cert is in: /root/.acme.sh/demo.example.com/ca.cer [Mon Dec 6 14:36:36 CST 2021] And the full chain certs is there: /root/.acme.sh/demo.example.com/fullchain.cer [Mon Dec 6 14:36:36 CST 2021] _on_issue_success
此时证书已经通过证书提供商认证, 可以准备安装并使用该证书了.
安装证书 现在已经证书批下来了, 假设存放的证书目录为 /data/https, 确保目录存在之后执行命令:
1 2 # 类似于: acme.sh --installcert -d <申请证书域名> --key-file <域名证书KEY> --fullchain-file <域名证书> --reloadcmd "<续签执行证书的执行系统命令>" acme.sh --installcert -d demo.example.com --key-file /data/https/demo.example.com.key --fullchain-file /data/https/demo.example.com.cer --reloadcmd "systemctl restart nginx"
如果没有什么问题, 现在 /data/https 目录下应该有以下文件:
demo.example.com.key
demo.example.com.cer
安全加固( dhparam,可选步骤 ) 这个步骤并不是必须的, 用于增强证书 SSL 的安全性来保证不会被窃取密钥, 多域名共用同个也可以, 直接输入命令:
1 2 # openssl dhparam -out <输出目录文件> <加密强度:2048|4096,数值越高安全性越高,性能消耗越高> sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
使用证书(Nginx) 这里直接在 Nginx 配置文件抄写上内容即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # 原生默认访问 http 会自动跳转 HTTPS server { listen 80; server_name demo.example.com; rewrite ^(.*)$ https://$host$1 permanent; } # HTTPS 监听访问 server { listen 443 ssl http2; server_name demo.example.com; # 启用申请的证书 ssl_certificate /data/https/demo.example.com.cer; ssl_certificate_key /data/https/demo.example.com.key; # 启用安全加固认证 ssl_dhparam /etc/nginx/ssl/dhparam.pem; # HTTPS 参数配置 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers '[ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305|ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305]:ECDHE+AES128:RSA+AES128:ECDHE+AES256:RSA+AES256:ECDHE+3DES:RSA+3DES'; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_stapling on; ssl_stapling_verify on; # 其他略..... }
重启 Nginx 再试下访问下, 确认能访问 HTTPS 即可生效.
清理自动签名 如果有的域名已经无效了, 想要清楚该域名的自动签发则需要运行以下命令:
1 2 acme.sh --list # 查看目前监控的所有自动签发证书 acme.sh --remove -d demo.example.com # 手动清除指定域名证书