* tomcat配置
****************/
打开tomcat/conf/server.xml会发现有下面一段配置被注释着:
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
这段配置可以让tomcat支持SSL连接。默认是注释的。取消他的注释,并按需修改。secure必须设置为true,scheme必须设计为https。如果你更改了SSL端口8443为其他端口,你必须修改其他非SSL的redirectPort,因为非SSL连接会重定向那些需要SSL安全约束的用户请求到你所修改的那个端口。
去掉注释,并启动tomcat,输入 https://localhost:8443 就可以看到SSL加密效果。 8443是配置的ssl请求连接端口。
/****************
* 可能存在问题1:
* 启动tomcat时,提示找不到.keystore文件
****************/
使用SSL协议加密是需要证书的,所以即使配置了 keystorefile ,也还需要一个 .keystore 文件。
解决方案:
在cmd下运行 keytool -genkey -alias tomcat -keyalg RSA
如要输入密码:输入: changeit
剩下的就填填就好了(有建议说名子和姓氏不要用 IP ,要用域名),完成后 C:\Documents and Settings\Administrator (或者C:\users\用户名)下面就会生成.keystore 文件。
keytool命令是JDK中自带的,若提示无效的指令,请检查JDK的环境变量是否配置正确。
/****************
* 可能存在问题2:
* 提示can not cover key
****************/
keytool -genkey -alias tomcat -keyalg RSA
执行过程中会询问你一些信息,比如国家代码,省市等,其中需要填写两个密码,一次在开头,一次在最后,请保持两个密码相同。比如,我将密码都设成changeit。
/****************
* 可能存在问题3:
* 已经创建了keystore,并且已经犯了问题2的错误。
****************/
这种时候,你再想重复创建这个别名就会提示你别名已存在。
这边我采取直接删除名为"tomcat"的这个alias,然后重新创建。
命令行键入:keytool -delete -alias tomcat
提示输入密钥库口令,按之前设置的输入。
/****************
* 可能存在问题4:
* 创建的地址不在默认位置
****************/
tomcat配置文件中,指定keystore文件的目录:
keystoreFile="bin/.keystore"
/****************
* 完全配置成功之后,访问https://localhost:8443
* 出现相应的安全提醒
****************/
那么这时候问题来了,通过8443端口可以进行https请求。
同时也可以通过8080(你自己设置的端口号)来进行http请求。
我们希望客户端(或者其他的)只能通过https来请求我们的服务,
就必须禁用不安全的http请求方式,或者使http重定向为https
解决方法:
在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>