https是http+ssl的可进行加密传输,身份认证的网络协议,防止数据在传输过程中被窃取。因此,https将得到越来越广泛的应用,下面是如何配置tomcat服务器让http自动转到https的步骤。


1. 配置https

1.1. 生成证书

  • 进入$JAVA_HOME/bin目录

  • 执行命令

./keytool -genkey -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 36500上述命令中,只需要修改“D:\tomcat.keystore” 这是你生成证书存放的位置。“-validity 36500”含义是证书有效期,36500表示100年。 ![http_https.png-15kB][1] 在生成证书过程中,可以只用输入密钥库口令,其余的都缺省。最后一个是输入的口令,这项较为重要,会在tomcat配置文件中使用,建议输入与keystore的密码一致,设置其它密码也可以。 另外,请最好用管理员权限运行cmd,不然生成证书时有可能出现javaFileIOexception的权限问题。

1.2 配置tomcat文件(server.xml)

打开tomcat\conf\server.xml,修改如下,


<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改参数=>
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" /> <!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"/>
-->
去掉注释且修改参数=>
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="D:\tomcat.keystore" keystorePass="tomcat"/>
注释:标识为淡蓝色的两个参数,分别是证书文件的位置和<tomcat>的主密码,在证书文件生成过程中做了设置
<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->
修改参数=>
<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

如果这样修改后,尝试在浏览器输入https网址访问,在谷歌浏览器如果出现下面的这样的问题: 提示“此网站无法提供安全连接”。 ![安全连接.png-40.3kB][2] 导致出现这个错误的原因是server.xml文件中启用了两种ssl配置机制,APR和JAVA Connector,我们在这里采用的是JAVA Connector机制。 那么,恭喜你,你还需要对server.xml做如下修改: 将下面这一行配置代码注释掉:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

如下图中箭头指的那行代码:


2. 强制https访问

接下来,我们还可以更进一步使每一个访问强制使用https访问,这样你只用输入url,就会自动启用https传输协议。

2.1 配置tomcat文件(web.xml)

tomcat\conf\web.xml中的</welcome-file-list>后面加上这样一段:

<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config> <security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

结果如下图所示:

3. 几点重要的说明

如果你将网站部署在一些网络端口资源稀缺的环境中,端口的资源控制严格。OK,那你可能会发现无法访问的情况。比如搭建的某个服务, 外网访问: 122.201.23.5:9924 端口映射为:9924->80跳转:122.201.23.5:80 假如你在配置server.xml文件时,按照我上面的步骤配置的话,在浏览器中你输入: 122.201.23.5:9924 你可能会遇到拒绝访问的问题。

原因在于单独输入上面的请求类似于: http:\\122.201.23.5:9924 而上面是一个http request,那么整个过程基本上就是: 9924->80(http)->(redirectport,https)8843 可是有时候,你可能没有8843端口的权限,因此无法访问。 因此对于只有一个端口时,那么就只能把那个端口配置成支持https的端口,不能加上重定向。但是这个时候,你必须在浏览器中输入,

https:\\122.201.23.5:9924

这是一个https request,整个过程为:

9924->80(https)

我前面讲的步骤都是有重定向端口的,假如不加上重定向的话最终配置就类似如下图这样:

<Connector port="80" protocol="HTTP/1.1" SSLEnabled="true"
connectionTimeout="20000"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\tomcat.keystore" keystorePass="tomcat"/>

但是,这样对用户来说太复杂了,每次在浏览器中药用户加上https,讲真,有点反人类! 所以综上,说到底!!兄弟,再去申请一个端口吧,反正几万个端口再申一个难度不大。


4. 参考链接

  • http://blog.sina.com.cn/s/blog_618592ea01012q40.html
  • https://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html
  • http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#SSL%20Support

tomcat配置https 和 http强制跳转https的更多相关文章

  1. windwos下nginx 配置https并http强制跳转https

    windwos下nginx  配置https并http强制跳转https 一.首先配置证书文件 申请证书文件,这里就不做详细过程了,直接看证书文件结果. 这是两个证书的关键文件 打开ngxin下con ...

  2. nginx 配置 HTTPS 及http 强制跳转https.

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  3. (转)Nginx的https配置记录以及http强制跳转到https的方法梳理

    Nginx的https配置记录以及http强制跳转到https的方法梳理 原文:http://www.cnblogs.com/kevingrace/p/6187072.html 一.Nginx安装(略 ...

  4. nginx配置http强制跳转https

    nginx配置http强制跳转https 网站添加了https证书后,当http方式访问网站时就会报404错误,所以需要做http到https的强制跳转设置. 一.采用nginx的rewrite方法 ...

  5. 解决:ngxin做http强制跳转https,接口的POST请求变成GET

    域名配置了http强制跳转htpps后发现app发起post请求会出现405错误. 所以怀疑是http强制跳转https出现了问题.修改nginx配置如下即可解决: server { listen ; ...

  6. ngxin做http强制跳转https,接口的POST请求变成GET

    http强制跳转https出现了问题.修改nginx配置如下即可解决: server { listen 80; server_name *.snsprj.cn; return 307 https:// ...

  7. 开启HSTS让浏览器强制跳转HTTPS访问

    开启HSTS让浏览器强制跳转HTTPS访问 来源 https://www.cnblogs.com/luckcs/articles/6944535.html 在网站全站HTTPS后,如果用户手动敲入网站 ...

  8. Nginx的https配置记录以及http强制跳转到https的方法梳理

    一.Nginx安装(略)安装的时候需要注意加上 --with-http_ssl_module,因为http_ssl_module不属于Nginx的基本模块.Nginx安装方法: 1 2 # ./con ...

  9. 服务器 apache配置https,http强制跳转https(搭建http与https共存)

    公司linux服务器上的nginx的已经改成https了,现在还剩下一个windows云服务器没配置. 环境 windows wampserver2.5 64位 1.腾讯云申请的ssl 包含三个文件: ...

随机推荐

  1. 关于ajaxfileupload的使用方法以及一些问题

    使用问题: 1.ajax-fileupload.js handleError 异常 由于本来handleError方法是jquery的方法,但jquery到了某个版本这个方法就去掉了没有了 所以最简单 ...

  2. 正则表达式&nbsp;LINUX

    正则表达式 热身 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 例如 g ...

  3. Windows下搭建Subversion&nbsp;服务器

    一.准备工作 1.获取 Subversion 服务器程序 到官方网站(http://subversion.tigris.org/)下载最新的服务器安装程序.目前最新的是1.5版本,具体下载地址在:ht ...

  4. (一)新建一个javaweb项目

    一.为了不影响其他项目,可以重新选择一个新的工作目录:swith workspace 二.为了尽可能统一项目,所使用的编程环境,包括:Tomcat.JRE都是项目组自己的,所以在新建项目的时候要注意选 ...

  5. 以交互方式将文本添加到图形中(matlab)

    这篇博客记录一下怎么用matlab在图形中简单的添加一些文本,以直方图均衡化为例.先看几张图片吧,第一幅是较暗的花粉的电子显微图像和对应的直方图,第二幅是其直方图均衡化的图像和对应的直方图,第三幅是对 ...

  6. HDU - 5094 Maze(状压+bfs)

    Maze This story happened on the background of Star Trek. Spock, the deputy captain of Starship Enter ...

  7. unity3d GUI字体设置

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class click001 ...

  8. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  9. CentOS设置代理, yum, wget

    /etc # vi yum.conf [main] cachedir=/var/cache/yum/basearch/releasever keepcache=0 debuglevel=2 logfi ...

  10. hdu2795(线段树单点更新&区间最值)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题意:有一个 h * w 的板子,要在上面贴 n 条 1 * x 的广告,在贴第 i 条广告时要 ...