在客户项目中,本来系统是允许在内网,由网管负责网络安全,但是后期增加了在线客服模块,被放置于客户的外网网站上,这样同时暴露了我方的系统,导致客户的网站安全受到威胁,所以客户要求我方系统要支持https协议访问,以下是配置为https协议的过程。
首先,需要产生一个证书,当然,在正式的生产环境,证书是由客户向合法的受信任的数字证书颁发机构申请,在实际项目中,不需要我们自己生成证书,是由客户提供的,但是在此处为了说明搭建HTTPS协议服务的过程,我们自己生成数字证书来演示此过程。
首先,使用jdk随机提供的证书生成工具:keytool, 此工具位于jdk的bin目录中,命令如下:
>keytool.exe -genkey -alias tomcat -keyalg RSA -keystore d:\tomcat.keystore
其中的d:\tomcat.keystore是指定生成的证书存放的位置和文件名,执行后,证书生成工具会以问答的方式,让用户输入几个问题:
1、输入秘钥库口令:
此处输入的口令要自己记清楚;
2、再次输入新口令:
重复上一步输入的口令;
3、您的名字与姓氏是什么:
这里注意应该输入认证网站的域名或IP,不是姓名,可能翻译有误;
4、您的组织单位名称是什么:
随便填写;
5、您的组织名称是什么:
随便填写;
6、您所在的城市或区域是什么:
随便填写
7、您所在的省/市/自治区是什么:
随便填写
8、该单位的双字母国家/地区代码是什么:
cn
9、显示以上填写的内容,确认是否正确:
如果正确,输入Y继续;
10、输入<tomcat>的秘钥口令(如果和秘钥库的口令相同,按回车):
此处直接按回车;
至此,在指定位置生成了证书文件:tomcat.keystore
证书生成后,需要修改tomcat的配置,这里使用的tomcat版本是7,进入tomcat的主目录的/conf下,打开server.xml, 找到以下内容:
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
缺省情况下,这部分内容是注释的,取消掉注释,并且改为以下内容:
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="d:\tomcat.keystore" keystorePass="111111"/>
首先,把端口改为443,这样在使用https协议访问的时候,就可以不用加端口号,443是安全套接层的缺省端口,就像80相当于8080一样;
keystoreFile 指定刚才生成的证书文件,对于正式的生产环境来说,应该是客户提供的正式申请的数字证书;
keystorePass是在生成证书时,输入的秘钥库口令;
修改完成后,保存server.xml文件,关闭,启动tomcat,如果启动没有问题,就可以以htts://ip/context来访问了。