文档中心
Nginx+Tomcat鐜涓婼SL璇佷功瀹夎閰嶇疆鍏ㄦ敾鐣?txt
时间 : 2025-09-27 16:25:55浏览量 : 3
一、为什么需要SSL证书?

想象一下你正在咖啡馆用公共WiFi网购,如果没有SSL加密,你的信用卡信息就像写在明信片上邮寄一样危险。SSL证书就是给这条通信通道加上一个防窃听的"保险箱"。
以电商网站为例:
- 未加密时:用户登录信息`username=admin&password=123456`直接明文传输
- 启用SSL后:变成类似`t8Fg$2x@!9Ln*7Qm...`的密文
主流浏览器对未加密网站的警告提示越来越严格,Chrome会将所有HTTP页面标记为"不安全",这会导致用户流失率上升37%(根据GlobalSign调研数据)。
二、准备工作:证书获取与验证
2.1 选择证书类型
就像不同安全级别的门锁:
- DV证书(域名验证):快速签发,仅验证域名所有权,适合博客类网站
- OV证书(组织验证):需提交企业资料,地址栏显示公司名称
- EV证书(扩展验证):最严格审核,浏览器显示绿色企业名称(如银行网站)
2.2 CSR生成实操
CSR(证书签名请求)相当于你的"身份证申请表",在Nginx服务器上生成:
```bash
openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
```
典型交互过程:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Inc.
Organizational Unit Name (eg, section) []:IT Dept
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:admin@example.com
注意:Common Name必须与网站域名完全一致!这是新手最容易出错的地方。
三、Nginx配置详解
3.1 基础配置模板
```nginx
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
TLS协议优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
HSTS安全增强(谨慎使用)
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
location / {
proxy_pass http://tomcat_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3.2 关键参数解析
1. `ssl_protocols`:禁用不安全的TLSv1.0/1.1版本
(漏洞案例:2014年POODLE攻击利用SSLv3漏洞)
2. `ssl_ciphers`:优先使用前向保密算法
(即使私钥泄露,历史通信仍安全)
3. HSTS头相当于告诉浏览器:"以后只许用HTTPS访问我"
四、Tomcat连接器配置
4.1 Nginx到Tomcat的代理设置
常见问题场景:
用户访问https://example.com/login.jsp
但Tomcat收到请求后生成的跳转链接却是http://example.com/success.jsp
导致浏览器出现"混合内容警告"
解决方案是在Nginx添加:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
同时在Tomcat的server.xml中配置:
```xml
proxyPort="443"
scheme="https"
secure="true"/>
4.2 SSL直连方案对比
方案 | CPU消耗 | 安全性 | 适用场景
-|--|-|
Nginx解密+Tomcat明文 | Tomcat低 | Nginx到Tomcat需内网隔离 | Tomcat集群环境
Nginx透传+Tomcat解密 | Tomcat高 | End-to-End加密 | PCI-DSS合规要求场景
(测试数据:单核服务器处理HTTPS请求能力约为HTTP的30%)
五、安装后的关键检查项
5.1 SSL检测工具使用
Qualys SSL Labs测试(在线工具)
curl https://api.ssllabs.com/api/v3/***yze?host=www.example.com
OpenSSL本地测试
openssl s_client -connect example.com:443 -servername example.com -tlsextdebug < /dev/null | openssl x509 -noout -text
常见问题诊断:
ERROR: Certificate CommonName(CN) does NOT match server name!
→ CN设置错误或未包含所有子域名(需使用SAN证书)
ERR_SSL_OBSOLETE_VERSION
→ Nginx配置中遗漏了TLSv1.2支持
5.2 OCSP装订优化
传统OCSP验证流程:
浏览器 → CA机构 → OCSP响应 → HTTPS连接建立
(延迟增加300-500ms)
启用OCSP Stapling后:
Nginx预先获取OCSP响应 → TLS握手时一并发送
配置方法:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/ca-bundle.crt;
resolver 8.8.8.8 valid=300s;
resolver_timeout 5s;
六、进阶安全加固建议
6.1 HTTP自动跳转HTTPS
推荐301永久重定向而非302临时跳转:
```nginx
listen 80;
server_name www.example.com example.com;
Google等搜索引擎会传递权重给HTTPS版本
6.2 HPACK头部压缩
针对大量小文件请求的场景:
http2_max_concurrent_streams =128;
gzip_types text/css application/javascript;
实测效果:网页加载时间减少15%-20%
最佳实践:
1?? CSR生成时仔细核对CN和SAN字段
2?? Nginx采用TLSv1
TAG:nginx tomcat ssl证书安装,nginx ssl证书申请,nginx安装ssl模块,nginx ssl证书生成,nginx添加ssl证书,nginx更换ssl证书