RT,使用ACME.sh实现自动申请泛域名SSL证书,网上ACME.sh教程其实很多的,但是也挺繁乱。这里我分享一篇我自己使用的搭配 NGINX + ACME.sh,方便刚接触SaaS系统的社友少走弯路。
————————————————————————————————
1:如果用root管理员的话,就查看root目录下有 .acme.sh/目录没有,如果没有就安装,有就直接使用。
推荐一个运维工具 FinalShell:https://www.hostbuf.com/
登录Linux服务器,先安装socat ,命令:
yum install -y socat
再下载ACME.sh脚本,(如果下载失败,就多试几次,具体看错误提示) 命令:
curl https://get.acme.sh | sh -s email=你的邮箱 如果下载不了,提示国内什么的, 就先在自己电脑下载 zip 后再上传到服务器即可,比如: 下载地址:https://codeload.github.com/acmesh-official/acme.sh/zip/refs/tags/3.0.7 再上传acme.sh-3.0.7.zip到服务器。解压安装就行: unzip acme.sh-3.0.7.zip && cd acme.sh-3.0.7 && ./acme.sh --install -m 你的邮箱 && cd .. && rm -rf acme.sh-3.0.7
再进入目录看是否下载成功,命令:
cd ~/.acme.sh/
为了方便使用 acme.sh 创建一个alias,命令:
alias acme.sh=~/.acme.sh/acme.sh
到这里就安装成功了!再进一步配置一下泛域名自动申请!
————————————————————————————————
2:泛域名申请只能DNS验证,我用的阿里云,其他云也支持,具体可以在网上查一下key。
https://github.com/acmesh-official/acme.sh/wiki/dnsapi
这里写阿里DNS的流程:
先到阿里云控制台申请 阿里云AccessKey ID
创建好后,复制key值,回到Linux服务器执行命令:
export Ali_Key="阿里云AccessKey ID"
export Ali_Secret="阿里云AccessKey Secret"
OK配置完毕!
————————————————————————————————
3:申请泛域名证书:
执行dns验证 (*.demo.myedu.top 需要替换为你自己的范域名) 命令:
acme.sh --issue --dns dns_ali -d *.demo.myedu.top 如果服务器访问不到外网,就使用国内代理商的: https://freessl.cn/acme-deploy
PS:个人喜好使用3级域名,这个域名的搭配看自己产品规划。产品多的时候,就用3级,中间放产品名:*.crm.xxx , *.cms.xxx 之类的,方便很多。。。
如果申请成功的话控制台会有成功提示!不成功需要看提示操作,经常会出现网络错误,多试几次即可。
如果ACME.sh是以前安装的,可以执行一下更新,命令:
acme.sh --upgrade
————————————————————————————————
4:申请成功后,再去配置NGINX,(NGINX先启动着)我这里贴一下我的配置:
阿里云域名得先解析过来:
server { listen 443; server_name *.demo.myedu.top; ssl on; #设置为on启用SSL功能。 root html; index index.html index.htm; ssl_certificate "/www/server/panel/vhost/cert/demo.cer";#替换成您证书的路径和文件名。 ssl_certificate_key "/www/server/panel/vhost/cert/demo.key";#替换成您证书的密钥路径和文件名。 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。 ssl_protocols TLSv1.1 TLSv1.2; #使用该协议进行配置。 ssl_prefer_server_ciphers on; #静态资源代理 (也可不要这段代码)重要的是上面 ssl 的那段,下面这些就是看自己业务了, location ~* \.(html|htm|shtml|zip|rar|doc|docx|xls|xlsx|ppt|ppts|gif|jpg|jpeg|png|bmp|swf|ico|js|css)$ { root /data/htdocs/27_vip_test;#静态资源的目录,NGINX分发静态文件性能更好,需要替换为自己的 } #动态请求代理 location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_redirect off; proxy_pass http://127.0.0.1:10027;#端口改为jfinal-undertow项目的端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; #JFinal nginx 代理 https 的场景,需要使用如下配置: proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; } ### 升级页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } access_log off; }
好了,记得保存好配置文件。
————————————————————————————————
5:关联NGINX + ACME.sh 实现 自动续期
安装证书命令:
acme.sh --installcert -d 泛域名 --key-file 证书的密钥路径和文件名 --fullchain-file 证书的路径和文件名 --reloadcmd "NGINX安装目录/nginx -s reload"
比如我的例子:
acme.sh --installcert -d *.demo.myedu.top --key-file /www/server/panel/vhost/cert/demo.key --fullchain-file /www/server/panel/vhost/cert/demo.cer --reloadcmd "/www/server/nginx/sbin/nginx -s reload"
--key-file 的参数就是 NGINX 配置里面的 ssl_certificate_key 参数,证书的密钥路径了。
--fullchain-file 的参数就是NGINX里的 ssl_certificate 参数,复制网页内搜索一下就看见了。
安装成功后会有成功提示。错误的话,也会有对应提示,看提示操作,一般错误就是路径没对上号了。
浏览器拍网址看下,是否HTTPS配置成功吧!
————————————————————————————————
自动续期是ACME.sh利用的Linux的 crontab,可以查看一下是否注册成功,命令:
crontab -l
ACME.sh 会每 30 天去请求 server 去获取新的证书,并进行安装。
快到期时也可以手动进行更新,让自己来个放心,执行命令:
"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh"
————————————————————————————————
好了,分享完毕!
点赞 + 收藏 啰~