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

Java应用不处理HTTPS证书,Apache负责SSL终止并反向代理至Java服务;脚本通过Certbot自动申请证书、配置Apache SSL与Proxy、重载服务,并需配置自动续期及SELinux等避坑项。

java中apache自动化部署https证书的shell脚本编写

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需调整包名和路径):#!/bin/bash

DOMAIN="example.com"

APACHE_CONF="/etc/httpd/conf.d/ssl.conf"

BACKEND_PORT="8080"

<h1>1. 安装依赖</h1><p>yum install -y epel-release certbot python3-certbot-apache httpd</p><div class="aritcle_card flexRow">

                                                        <div class="artcardd flexRow">

                                                                <a class="aritcle_card_img" href="/ai/1228" title="NameGPT名称生成器"><img

                                                                                src="https://img.php.cn/upload/ai_manual/000/000/000/175680125954711.png" alt="NameGPT名称生成器"  onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>

                                                                <div class="aritcle_card_info flexColumn">

                                                                        <a href="/ai/1228" title="NameGPT名称生成器">NameGPT名称生成器</a>

                                                                        <p>免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。</p>

                                                                </div>

                                                                <a href="/ai/1228" title="NameGPT名称生成器" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>

                                                        </div>

                                                </div><h1>2. 启动并启用Apache</h1><p>systemctl enable httpd

systemctl start httpd</p><h1>3. 临时开放80端口(Certbot需要HTTP验证)</h1><p>firewall-cmd --permanent --add-port=80/tcp

firewall-cmd --reload</p><h1>4. 使用Certbot自动申请并配置HTTPS(自动改Apache配置)</h1><p>certbot --apache -d "$DOMAIN" --non-interactive --agree-tos -m admin@example.com</p><h1>5. 手动补全反向代理配置(Certbot不自动加,需确保Java服务可达)</h1><p>if ! grep -q "ProxyPass / <a href="https://www.php.cn/link/3de2f5d6b216073b662a9e202fb4b556">https://www.php.cn/link/3de2f5d6b216073b662a9e202fb4b556</a>" "$APACHE_CONF"; then

cat >> "$APACHE_CONF" << 'EOF'

<VirtualHost *:443>

ServerName '"$DOMAIN"'

SSLEngine on

SSLCertificateFile /etc/letsencrypt/live/'"$DOMAIN"'/fullchain.pem

SSLCertificateKeyFile /etc/letsencrypt/live/'"$DOMAIN"'/privkey.pem

ProxyPreserveHost On

ProxyPass / <a href="https://www.php.cn/link/4a643e03578577526149a599ac6f332b">http://127.0.0.1:'"$BACKEND_PORT</a>"'/

ProxyPassReverse / <a href="https://www.php.cn/link/4a643e03578577526149a599ac6f332b">http://127.0.0.1:'"$BACKEND_PORT</a>"'/

</VirtualHost>

EOF

fi</p><h1>6. 重载Apache生效</h1><p>systemctl reload httpd</p><h1>7. 开放443端口</h1><p>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

常见问题与避坑提示

执行失败?重点排查这几项:

tjwx-11pp.watchnf.com

tjwx-11jsdd.watchnf.com

tjwx-11yd.watchnf.com

tjwx-11baopo.watchnf.com

tjwx-11baoji.watchnf.com

tjwx-11licha.watchnf.com

tjwx-11jjia.watchnf.com

tjwx-11bojue.watchnf.com

tjwx-11glsd.watchnf.com

tjwx-11lg.watchnf.com

tjwx-11pmqn.watchnf.com

tjwx-11ykdl.watchnf.com

tjwx-11fkyb.watchnf.com

tjwx-11ljdb.watchnf.com

tjwx-11lls.watchnf.com

tjwx-11omj.watchnf.com

tjwx-11wg.watchnf.com

tjwx-11bnl.watchnf.com

tjwx-11yubo2.watchnf.com

tjwx-11xb.watchnf.com

tjwx-11zls.watchnf.com

tjwx-11xne.watchnf.com

tjwx-11pnh.watchnf.com

tjwx-11gp.watchnf.com

tjwx-11bql.watchnf.com

tjwx-11fml.watchnf.com

tjwx-11lq.watchnf.com

tjwx-11dd.watchnf.com

tjwx-11tghy.watchnf.com

tjwx-11ld.watchnf.com

tjwx-11wbl.watchnf.com

tjwx-11md.watchnf.com

tjwx-11ts.watchnf.com

tjwx-11jg.watchnf.com

tjwx-11xtc.watchnf.com

tjwx-11mh.watchnf.com

tjwx-11yng.watchnf.com

tjwx-11zh.watchnf.com

whwx.watchmh.cn

whwx-11pp.watchmh.cn

whwx-11jsdd.watchmh.cn

whwx-11kdy.watchmh.cn

whwx-11baopo.watchmh.cn

whwx-11jjia.watchmh.cn

whwx-11glsd.watchmh.cn

whwx-11lg.watchmh.cn

whwx-11pmqn.watchmh.cn

域名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-*头

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容