前言

受限于大陆的网络环境 ,我们在使用原生acme.sh申请证书的时候,经常会遇到各种各样的问题。。。今天推荐一个国内比较好用的免费证书签发服务 - FreeSSL

1.安装acme.sh

这个就不用说了,基于ACME协议的最强证书自动化神器!

# 安装acme.sh 推荐用root用户安装,避免不必要的麻烦。
curl https://get.acme.sh | sh -s email=name@domain.com # 海外原脚本,如果太慢或根本连不上可以用下面的镜像版本
curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false | sh -s email=name@domain.com # 镜像地址

# 安装完毕后重新连接SSH或者执行以下命令重载环境变量
source /etc/profile

2.到FreeSSL.cn申请证书并部署到服务器

打开FreeSSL,填写域名,选择证书品牌。推荐选择亚洲诚信多域名通配符证书,这个证书是免费三个月的并且能自动续期,而且是通配符证书,可以申请泛域名证书。
202304131337353.png
点击创建免费的SSL证书跳转到域名解析配置提示弹窗界面(如果没有登录会跳转到登录页面)
202304131352341.png
根据提示创建解析记录(这里以CloudFlare为例)
202304131353139.png
创建好解析记录后,回到页面点击 配置完成,立即检测 按钮,如果检测成功会跳转到部署,如果检测失败请检查解析记录是否正确。
202304131358679.png

最后复制acme.sh部署命令到服务器执行。

3.安装自动化任务

# 只要上面配置的CNAME记录不删除,后续证书就能正常自动续期。
acme.sh --install-cert -d test.eber.vip --key-file /usr/local/nginx/conf/ssl/test.eber.vip.key --fullchain-file /usr/local/nginx/conf/ssl/test.eber.vip.crt --reloadcmd "service nginx force-reload"
注意 命令中 /usr/local/nginx/conf/ssl 替换成你自己存放证书的目录。后面的的 --reloadcmd 参数是指定证书更新后执行的命令,这里是重载Nginx配置,如有其他需求可以自行修改。

4.配置文件示例

这里提供一个nginx反向代理其他服务的配置文件最佳实践,可以根据实际情况修改使用。

server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /usr/local/nginx/conf/ssl/test.eber.vip.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/test.eber.vip.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000; # HSTS头配置
ssl_stapling on;
ssl_stapling_verify on;
server_name test.eber.vip;
access_log /usr/local/nginx/wwwlogs/test.eber.vip_nginx.log combined;
if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
location / {
proxy_pass http://127.0.0.1:8080; # 目标服务地址
include proxy.conf; # 引入自定义的反代配置
# 支持ws
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
deny all;
}
}