当前位置首页 > Nginx知识

Windows下Tomcat+nginx配置证书实现登录页https访问

阅读次数:180 次  来源:admin  发布时间:

最近公司出于安全考虑,需要将登录页做成https访问,其他页面仍采用http访问,环境是Linux平台,web服务器采用Tomcat + Nginx。之前没接触过nginx,这两天网上查资料,试了好多,终于有点小成果,特此做一下记录。目前还存在一些问题,希望各位多多指教。下面说一下我的具体做法:

1.将nginx解压到C盘根目录,重命名文件夹为Nginx(版本:1.3.5)。

2.生成自签名证书(采用OpenSSL生成),生成工具下载:绿色版OpenSSL工具.rar、自签名测试证书工具.rar。

3.将生成的证书文件server.cer和server.key分别都拷贝到Tomcat和Nginx的conf目录下,双击生成的root.cer根证书,然后安装证书,将其安装到受信任的根证书颁发机构(如不安装,访问时浏览器会提示证书错误)。

4.配置Tomcat的server.xml文件和web工程的web.xml文件:

https配置:

1 <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" 2 SSLEnabled="true" maxThreads="150" 3 scheme="https" secure="true" disableUploadTimeout="true" 4 enableLookups="false" acceptCount="100" clientAuth="false" 5 SSLCertificateFile="C:/Program Files/Tomcat 6.0/conf/server.cer" 6 SSLCertificateKeyFile="C:/Program Files/Tomcat 6.0/conf/server.key" 7 SSLVerifyClient="none" sslProtocol="TLS" />

虚拟目录配置:

1 <Host name="localhost" appBase="C:\nginx\html" 2 unpackWARs="true" autoDeploy="true" 3 xmlValidation="false" xmlNamespaceAware="false">

web.xml文件中加入如下配置:

01 <!-- 登录页采用https访问 --> 02 <security-constraint> 03 <web-resource-collection> 04 <web-resource-name>SSL</web-resource-name> 05 <url-pattern>/index/*</url-pattern> 06 </web-resource-collection> 07 <user-data-constraint> 08 <transport-guarantee>CONFIDENTIAL</transport-guarantee> 09 </user-data-constraint> 10 </security-constraint>

5.配置Nginx的nginx.conf文件:

01 server { 02 listen 80; 03 server_name localhost;#域名,可以多个 04 05 #charset koi8-r; 06 07 #access_log logs/host.access.log main; 08 09 #配置规则 10 location / { 11 if (!-f $request_filename){ 12 rewrite ^/pages/common/(.*)$ /error.jsp; 13 } 14 root yddweb; 15 #index index.jsp; 16 proxy_pass http://localhost:8080; 17 proxy_set_header Host $host:80; 18 proxy_set_header X-Real-IP $remote_addr; 19 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 20 proxy_set_header Via "nginx"; 21 } 22 23 location ^~ /pages/$ { 24 root yddweb; 25 #index index.jsp; 26 proxy_pass http://localhost:8080; 27 proxy_set_header Host $host:80; 28 proxy_set_header X-Real-IP $remote_addr; 29 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 30 proxy_set_header Via "nginx"; 31 } 32 33 #location ~ \.(gif|jpg|png|js|css)$ { 34 #规则 35 #} 36 } 37 38 # HTTPS server 39 # 40 server { 41 listen 443; 42 server_name localhost:443; 43 44 ssl on; 45 ssl_certificate server.cer;# 46 ssl_certificate_key server.key; 47 48 ssl_session_timeout 5m; 49 50 #ssl_protocols SSLv2 SSLv3 TLSv1; 51 #ssl_ciphers HIGH:!aNULL:!MD5; 52 #ssl_prefer_server_ciphers on; 53 54 #配置规则 55 location ^~ /index/.jsp$ { 56 root yddweb; 57 index login.jsp; 58 proxy_pass https://localhost:8443; 59 proxy_set_header Host $host:443; 60 proxy_set_header X-Real-IP $remote_addr; 61 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 62 proxy_set_header Via "nginx"; 63 } 64 location ~ ^/(WEB-INF)/ { 65 deny all; 66 } 67 } 68 }

6.web工程的截图:

Windows下Tomcat+nginx配置证书实现登录页https访问

LoginServlet的代码:

1 HttpSession session = request.getSession(true); 2 String name = request.getParameter("name").trim(); 3 session.setAttribute("curuser", name); 4 String url = "http://"+request.getServerName()+request.getContextPath()+"/pages/system/myinfo.jsp"; response.sendRedirect(url)

目前存在的问题(希望各位多多指教):

1.在本机访问https正常,其他机器访问浏览器提示证书错误。

2.location规则的配置,由于本人水平有限,对location规则的配置不是很了解,所以location目前不太会配置(配置要求:index目录下的页面采用https访问,其他页面全部采用http访问)。

参考资料:

证书生成与配置:http://www.ert7.com/install/sslinstall/1244.html

上一篇:简单实现Ubuntu16.04+caffe2+CUDA9.0+cuDNN8.0
下一篇:RHEL/CentOS/Fedora各种源(EPEL、Remi、RPMForge、RPMFusion)配置