概述
2019独角兽企业重金招聘Python工程师标准>>>
最近公司出于安全考虑,需要将登录页做成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配置:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
SSLEnabled="true" maxThreads="150"
scheme="https" secure="true" disableUploadTimeout="true"
enableLookups="false" acceptCount="100" clientAuth="false"
SSLCertificateFile="C:/Program Files/Tomcat 6.0/conf/server.cer"
SSLCertificateKeyFile="C:/Program Files/Tomcat 6.0/conf/server.key"
SSLVerifyClient="none" sslProtocol="TLS" />
虚拟目录配置:
<Host name="localhost" appBase="C:nginxhtml"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
web.xml文件中加入如下配置:
<!-- 登录页采用https访问 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/index/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
5.配置Nginx的nginx.conf文件:
server {
listen 80;
server_name localhost;#域名,可以多个
#charset koi8-r;
#access_log logs/host.access.log main;
#配置规则
location / {
if (!-f $request_filename){
rewrite ^/pages/common/(.*)$ /error.jsp;
}
root yddweb;
#index index.jsp;
proxy_pass http://localhost:8080;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
location ^~ /pages/$ {
root yddweb;
#index index.jsp;
proxy_pass http://localhost:8080;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
#location ~ .(gif|jpg|png|js|css)$ {
#规则
#}
}
# HTTPS server
#
server {
listen 443;
server_name localhost:443;
ssl on;
ssl_certificate server.cer;#
ssl_certificate_key server.key;
ssl_session_timeout 5m;
#ssl_protocols SSLv2 SSLv3 TLSv1;
#ssl_ciphers HIGH:!aNULL:!MD5;
#ssl_prefer_server_ciphers on;
#配置规则
location ^~ /index/.jsp$ {
root yddweb;
index login.jsp;
proxy_pass https://localhost:8443;
proxy_set_header Host $host:443;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
location ~ ^/(WEB-INF)/ {
deny all;
}
}
}
6.web工程的截图:
LoginServlet的代码:
HttpSession session = request.getSession(true);
String name = request.getParameter("name").trim();
session.setAttribute("curuser", name);
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
转载于:https://my.oschina.net/4k9LCGA/blog/75093
最后
以上就是尊敬皮卡丘为你收集整理的Windows下Tomcat+nginx配置证书实现登录页https访问的全部内容,希望文章能够帮你解决Windows下Tomcat+nginx配置证书实现登录页https访问所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复