前言
受限于大陆的网络环境 ,我们在使用原生acme.sh申请证书的时候,经常会遇到各种各样的问题。。。今天推荐一个国内比较好用的免费证书签发服务 - FreeSSL 。
1.安装acme.sh
这个就不用说了,基于ACME协议的最强证书自动化神器!
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
source /etc/profile
|
2.到FreeSSL.cn申请证书并部署到服务器
打开FreeSSL,填写域名,选择证书品牌。推荐选择亚洲诚信多域名通配符证书,这个证书是免费三个月的并且能自动续期,而且是通配符证书,可以申请泛域名证书。
点击创建免费的SSL证书跳转到域名解析配置提示弹窗界面(如果没有登录会跳转到登录页面)
根据提示创建解析记录(这里以CloudFlare为例)
创建好解析记录后,回到页面点击 配置完成,立即检测 按钮,如果检测成功会跳转到部署,如果检测失败请检查解析记录是否正确。
最后复制acme.sh部署命令到服务器执行。
3.安装自动化任务
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; 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; 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; } }
|