跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Java中Apache自动化部署HTTPS证书的Shell脚本编写

Java应用不处理HTTPS证书,Apache负责SSL终止并反向代理至Java服务;脚本通过Certbot自动申请证书、配置Apache SSL与Proxy、重载服务,并需配置自动续期及SELinux等避坑项。 Java应用本身不直接处理HTTPS证书部署,Apache HTTP Server(通常指 httpd)才负责SSL/TLS终止。所谓“Java中Apache自动化部署HTTPS证书”,实际是指:在运行Java Web应用(如Spring Boot、Tomcat)的服务器上,用Apache作为反向代理,并通过Shell脚本自动完成Apache的SSL证书申请(如用Certbot)、配置更新与服务重载。 明确角色分工:Apache管HTTPS,Java应用管业务 常见架构是:用户 → Apache(HTTPS + 反向代理) → Tomcat/Spring Boot(HTTP,内网通信)。因此Shell脚本操作对象是Apache配置( /etc/httpd/conf.d/ssl.conf 或 /etc/apache2/sites-enabled/000-default-le-ssl.conf ),不是Java代码或JVM参数。 关键点: Certbot会自动修改Apache虚拟主机配置,启用SSL模块并指向证书路径 脚本需确保Apache已启用 mod_ssl 和 mod_proxy (用于代理Java后端) Java应用应监听本地端口(如 8080 ),不暴露公网,也不自行配置keystore 核心Shell脚本:申请+部署+验证 以下为可直接运行的精简版脚本(适配CentOS/RHEL系,Debian/Ubuntu需调整包名和路径): 立即学习 “ Java免费学习笔记(深入) ”;
#!/bin/bash DOMAIN="example.com" APACHE_CONF="/etc/httpd/conf.d/ssl.conf" BACKEND_PORT="8080"

1. 安装依赖

yum install -y epel-release certbot python3-certbot-apache httpd

2. 启动并启用Apache

systemctl enable httpd systemctl start httpd

3. 临时开放80端口(Certbot需要HTTP验证)

firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload

4. 使用Certbot自动申请并配置HTTPS(自动改Apache配置)

certbot --apache -d "$DOMAIN" --non-interactive --agree-tos -m admin@example.com

5. 手动补全反向代理配置(Certbot不自动加,需确保Java服务可达)

if ! grep -q "ProxyPass / https://www.php.cn/link/3de2f5d6b216073b662a9e202fb4b556" "$APACHE_CONF"; then cat >> "$APACHE_CONF" << 'EOF' ServerName '"$DOMAIN"' SSLEngine on SSLCertificateFile /etc/letsencrypt/live/'"$DOMAIN"'/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/'"$DOMAIN"'/privkey.pem ProxyPreserveHost On ProxyPass / http://127.0.0.1:'"$BACKEND_PORT"'/ ProxyPassReverse / http://127.0.0.1:'"$BACKEND_PORT"'/ EOF fi

6. 重载Apache生效

systemctl reload httpd

7. 开放443端口

firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload

后续维护:自动续期不能少 Let’s Encrypt证书90天过期,必须配置自动续期。Certbot自带定时任务,但需验证是否启用: 检查定时任务: systemctl list-timers | grep certbot 手动测试续期: certbot renew --dry-run 确保续期后自动重载Apache:在 /etc/letsencrypt/renewal/example.com.conf 中添加
renew_hook = systemctl reload httpd
常见问题与避坑提示 执行失败?重点排查这几项: 域名DNS必须已解析到该服务器IP ,否则HTTP-01验证失败 Apache配置中不能有语法错误 ,运行 apachectl configtest 验证 SELinux可能阻止代理 :执行 setsebool -P httpd_can_network_connect 1 Java应用需允许本地代理请求 :如Spring Boot设置 server.forward-headers-strategy=native ,并信任X-Forwarded-*头

相关文章