JFinal使用技巧-自动申请泛域名SSL证书 方便SaaS

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=你的邮箱

再进入目录看是否下载成功,命令:

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

image.png

image.png

创建好后,复制key值,回到Linux服务器执行命令:

export Ali_Key="阿里云AccessKey ID"
export Ali_Secret="阿里云AccessKey Secret"

OK配置完毕! 

————————————————————————————————

3:申请泛域名证书:

执行dns验证 (*.demo.yunfinal.com 需要替换为你自己的范域名) 命令:

acme.sh --issue --dns dns_ali -d *.demo.yunfinal.com

PS:个人喜好使用3级域名,这个域名的搭配看自己产品规划。产品多的时候,就用3级,中间放产品名:*.crm.xxx , *.cms.xxx 之类的,方便很多。。。

如果申请成功的话控制台会有成功提示!不成功需要看提示操作,经常会出现网络错误,多试几次即可。

如果ACME.sh是以前安装的,可以执行一下更新,命令:

acme.sh --upgrade

————————————————————————————————

4:申请成功后,再去配置NGINX,(NGINX先启动着)我这里贴一下我的配置:

阿里云域名得先解析过来:
image.png

image.png

server {
    listen 443;
    server_name *.demo.yunfinal.com;

    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.yunfinal.com --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

image.png

ACME.sh 会每 30 天去请求 server 去获取新的证书,并进行安装。

快到期时也可以手动进行更新,让自己来个放心,执行命令:

"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh"


————————————————————————————————

好了,分享完毕! 

点赞 + 收藏 啰~

评论区

久伴轻尘

2022-10-14 20:11

先赞后看

maapple

2022-10-14 20:33

谢谢杜大神

JFinal

2022-10-16 22:58

这几天居然没注意到这么好的分藏,点赞收藏一波

泛域名 SSL证书非常有用,目前我的 SSL 证书都还是手动一个个申请的,很不方便

happyboy

2022-10-17 08:46

宝塔和lnmp也能实现自动续期,O(∩_∩)O哈哈~

琴海森林

2022-10-17 10:51

老杜的黑科技,赞