树莓派上React+Spring Boot+NGINX的HTTPS SSL证书故障排查
解决HTTPS部署的SSL证书及握手错误问题
一、处理调试工具提示的"self-signed certificate"错误
自签名证书本身不被浏览器、API调试工具信任,这是预期行为,分场景处理:
- 调试工具临时绕过:在Postman的「Settings > General」里关闭「SSL certificate verification」;Insomnia在「Preferences > SSL」里勾选「Disable SSL validation」。注意这仅适合开发调试,生产环境禁用此操作。
- React开发环境适配:本地React项目调用HTTPS接口时,修改package.json的启动命令,添加忽略证书参数:
"start": "HTTPS=true NODE_TLS_REJECT_UNAUTHORIZED=0 react-scripts start"
二、解决Spring Boot的"Insufficient buffer remaining for AEAD cipher fragment"握手错误
这个错误多与SSL配置冲突或证书参数有关,按以下步骤排查:
- 取消重复SSL配置:你已经用NGINX做反向代理,无需在Spring Boot中再配置SSL。注释掉application.properties里的SSL相关配置:
让NGINX单独处理HTTPS,后端Spring Boot通过HTTP与NGINX通信,这是更常规的部署方式,可避免双重SSL握手问题。# server.ssl.key-store=xxx # server.ssl.key-store-password=xxx # server.ssl.key-alias=xxx - 若必须Spring Boot处理SSL:确认证书为PKCS12格式(Spring Boot推荐),并配置兼容AEAD算法的Cipher Suites:
同时确保证书密钥长度在2048位以上,若不符合则重新生成证书。server.ssl.ciphers=TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_AES_128_GCM_SHA256
三、生产环境最优方案:使用Let's Encrypt可信免费证书
自签名证书在生产环境始终存在信任问题,建议用Let's Encrypt生成可信证书:
- 在树莓派安装Certbot并申请证书:
Certbot会自动配置NGINX的SSL参数及证书自动续期。sudo apt-get install certbot python3-certbot-nginx sudo certbot --nginx -d owt-api.quentingenet.fr - 确认NGINX转发配置正确,将HTTPS请求转到Spring Boot的HTTP端口(如8080):
server { listen 443 ssl; server_name owt-api.quentingenet.fr; ssl_certificate /etc/letsencrypt/live/owt-api.quentingenet.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/owt-api.quentingenet.fr/privkey.pem; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } # 强制HTTP跳转HTTPS server { listen 80; server_name owt-api.quentingenet.fr; return 301 https://$host$request_uri; } - Spring Boot添加反向代理识别配置,让服务正确识别真实请求协议:
server.forward-headers-strategy=NATIVE
内容的提问来源于stack exchange,提问作者Quentin Genet
相关产品推荐
相关产品推荐

