Nginx:服务器端SSL配置
一、nginx配置
upstream tomcats_ssl { server 192.168.33.10:8090 srun_id=tomcat01; server 192.168.33.11:8090 srun_id=tomcat02; jvm_route $cookie_JSESSIONID|sessionid reverse; #保证session同步,参考http://hanqunfeng.iteye.com/blog/1920994 #需要cas验证的应用更要配置,否则会造成死循环。 } server { listen 443; server_name nginx.server.name; ssl on; #开启ssl验证 ssl_certificate /usr/local/nginx/sslkey/server.crt; #证书 ssl_certificate_key /usr/local/nginx/sslkey/server.key; #密钥 ssl_session_timeout 5m; #session有效期,5分钟 ssl_protocols SSLv2 SSLv3 TLSv1; #ssl协议 ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #ssl加密算法 ssl_prefer_server_ciphers on; location /ssl_test/ { proxy_pass http://tomcats_ssl; include /usr/local/nginx/proxy.conf; access_log /usr/local/nginx/logs/01.ssl.log main; } }
二、生成证书(这里是测试证书)
[root@localhost sslkey]# openssl req -new -x509 -nodes -out server.crt -keyout server.key
三、测试
重启nginx,请求:https://nginx.server.name/ssl_test,普通应用即可成功打开。
四、需要cas验证的应用
如果后端应用是需要cas登录验证的,则在成功登录cas回调后端服务器时会发生https协议转换为http协议,同时端口443转换为80的情况,导致应用不可正常访问,
例如https://nginx.server.name/ssl_test被cas回调后变为http://nginx.server.name/ssl_test,
目前的解决方案是,在后端服务的tomcat的server.xml中增加如下配置:
将 <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> 修改为: <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" scheme="https" proxyName="nginx.server.name" proxyPort="443" redirectPort="8443" URIEncoding="UTF-8" />
scheme
调用request.getScheme()时返回的协议名称。比如,在SSL Connector上可能将这个属性设为“https”。缺省值为“http”。
proxyName
如果connector在代理配置中使用,将这个属性设置成调用request.getServerName()时返回的服务器名称。
proxyPort
如果Connector在代理配置中使用,这个属性指定了调用request.getServerPort()返回的端口值。
在Tomcat位于代理服务器后面时,可以使用proxyName和proxyPort属性。这些属性修改了调用 requset.getServerName()和request.getServerPort()的返回值,用来构造重定向的绝对URL。如果不设置这 些值,返回值反映了代理服务器收到的连接的服务器名称和端口号,而不是客户端发起的服务器名称和端口号。
五、client&&server双向SSL配置
参考了网上的资料:
http://blog.csdn.net/rosw/article/details/3441187
http://www.linuxidc.com/Linux/2012-11/75130.htm(亲测,见附件)
不过只有Google(双击证书)和Firefox(导入时要选择“您的证书”)浏览器可以通过验证,IE(IE10)虽然成功导入证书,但仍提示证书错误。