certbot更新证书很OK,但是jks的证书格式就很麻烦,加上一个自动脚本每天定时执行即可,再来一个自动启动Java程序的,基本上就不需要因为证书问题去维护了。
废话少说,直接上代码
#!/bin/bash
# Certbot命令,用于生成或更新证书
certbot_command="certbot renew"
# 运行Certbot命令来生成或更新证书
$certbot_command
# Certbot生成的证书和私钥文件路径
cert_path="/etc/letsencrypt/live/xxx.com/fullchain.pem"
key_path="/etc/letsencrypt/live/xxx.com/privkey.pem"
# JKS目标路径和文件名
jks_path="/opt/java/project" # 此处文件夹结尾不加/
jks_filename="xxx.com.jks"
# JKS别名和密码
alias_name="wodejks"
keystore_password="pwd123456"
# 将证书和私钥合并为PKCS12格式
openssl pkcs12 -export -in $cert_path -inkey $key_path -out $jks_path/cert.p12 -name $alias_name -password pass:$keystore_password
# 将PKCS12格式转换为JKS格式
keytool -importkeystore -destkeystore $jks_path/$jks_filename -srckeystore $jks_path/cert.p12 -keypass $keystore_password -srcstoretype PKCS12 -storepass $keystore_password
echo '\n\n\n'
keytool -importkeystore -srckeystore $jks_path/cert.p12 -srcstoretype PKCS12 -destkeystore $jks_path/$jks_filename -deststoretype JKS -srcstorepass $keystore_password -deststorepass $keystore_password -destkeypass $keystore_password -noprompt
# 删除临时文件
rm $jks_path/cert.p12
定时执行脚本,可以使用crontab -e
然后和vim一样,编辑内容:
0 4 * * * /path/to/your/gen_jks.sh
设置为每天凌晨4点,执行/path/to/your目录下的gen_jks.sh文件
请注意:脚本并未加入Kill和启动Java程序的内容,需要自己手动编辑,kill指定Java进程,可以根据端口监听来获取进程id,比如监听8080端口的进程:
lsof -ti:8080 | xargs kill
这个命令使用了两个关键命令:lsof 和 kill。
lsof -ti:8080:这个命令使用 lsof 工具来查找监听端口为8080的进程,并使用 -ti 选项仅输出进程的PID(进程ID)。
xargs kill:xargs 命令将前一步获取的PID作为参数传递给 kill 命令,以杀死对应的进程。