命令行执行%JAVA_HOME%\bin\keytool -genkey -aliastomcat -keyalg RSA
执行过程中会询问你一些信息,比如国家代码,省市等,其中需要填写两个密码,一次在开头,一次在最后,请保持两个密码相同。比如,我将密码都设成aas@123456。
如果不同,启动会报错,大概是下面这样的
java.io.IOException:Cannot recover key
执行完成后会生成一个.keystore文件,将它复制到tomcat的bin目录下(并不一定,放哪里都可以,我放在bin目录下)
打开conf目录下的server.xml文件,找到以下这一段它被注释掉了,将注释去掉,并将这一段改成以下
maxThreads="150"scheme="https" secure="true"
clientAuth="false"sslProtocol="TLS"
keystoreFile="bin/.keystore"keystorePass="aas@123456"//前面设置的密码
truststoreFile="bin/.keystore"truststorePass="aas@123456"//前面设置的密码
之后启动tomcat就可以了,通过https方式访问8080端口,就能看到效果。如果用http访问之前的端口,那么还是普通的未加密连接。
到这里问题来了,我的目的是启用https,但现在http还能访问,那么就可以绕开https。https也就起不了什么作用了。因此要强制访问https。
强制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>
完成以上步骤后,在浏览器中输入http的访问地址也会自动转换为https了。