一、startssl证书申请 请参考如下链接
http://www.zntec.cn/archives/startssl.html
最终生成四个文件:
ssl.key
ssl.crt
ca.pem
sub.class1.server.ca.pem
二、nginx+tomcat配置
http://m.blog.csdn.net/blog/andywu201002/39027121
注:只需要配置nginx接收https请求,在分发到tomcat是仍使用http
SSL 的目的是为了保证网络通信的安全以及数据完整性。所以,如果 tomcat 前面有了 nginx 作为反向代理,那就没有理由再在 nginx 和 tomcat 之间进行加密传输,毕竟二者处于同一内网。
如上图所示,客户端通过 SSL 请求过来的访问被反向代理 nginx 接收,nginx 结束了 SSL 并将请求以纯 HTTP 提交 tomcat。nginx 配置 nginx.conf增加如下内容:
upstream https_proxy {
#server 42.96.138.56:443 max_fails=0;
#server 42.96.138.56:80 max_fails=0;
server 192.168.231.224:8080 max_fails=0;
}
server {
listen 443 ssl;
server_name www.zhoufengjie.cn zhoufengjie.cn;
ssl on;
ssl_certificate /usr/local/nginx/ca/server/server.crt;
ssl_certificate_key /usr/local/nginx/ca/server/server.key;
ssl_client_certificate /usr/local/nginx/ca/private/ca.crt;
ssl_session_timeout 5m;
ssl_verify_client on; #开户客户端证书验证
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
charset utf-8;
location / {
proxy_redirect off;
proxy_set_header Host $http_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;
#proxy_set_header Accept-Encoding “”;
add_header Power-By-Tyumen “$upstream_cache_status from $hostname”;
proxy_pass http://https_proxy;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_read_timeout 600;
}
access_log /data/logs/https_proxy.log custom_log;
}
2、tomcat配置
Nginx 反向代理 HTTP 不需要更改 Tomcat 配置。与 HTTP 代理不同的是,这里需要通过更改 tomcat 的配置文件来告诉它前面的 HTTPS 代理。将 %tomcat%/conf/ 以下部分:
connectionTimeout=”20000″ redirectPort=”8443″/> connectionTimeout=”20000″ redirectPort=”8443″ scheme=”https” proxyName=”www.zhoufengjie.cn” proxyPort=”443″ /> 遇到问题: 在配置nginx的ssl过程中,查看其日志,报如下错误,导致不能转发到tomcat服务器
修改为nginx: [emerg] SSL_CTX_use_PrivateKey_file("/usr/local/nginx/conf/ssl.key/server.key")
failed (SSL: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
error:0906A065:PEM routines:PEM_do_header:bad decrypt error:140B0009:SSL routines:
SSL_CTX_use_PrivateKey_file:PEM lib)
经查询分析,其原因是key文件加密方式不对,得使用rsa加密处理一下,执行以下两句就OK:
#cp server.key server.key.org
#openssl rsa -in server.key.org -out server.key