Tomcat版本:apache-tomcat-9.0.27 jdk版本:1.8.0_212 浏览器:火狐
1. 生成证书
https协议需要证书,开发时我们可以使用jdk自带的keytool工具生成一个证书来进行测试;
首先确保本地有jdk的环境,可以使用java -version来查看,然后运行以下代码,姓氏名称什么的随便填写即可.
keytool -genkeypair -alias testKey -keyalg RSA -storepass 123456 -keyalg RSA -keysize 2048 -validity 3650 -keystore ./testKey.jks
<!--
-alias testKey:证书项的名字,必填项
-keyalg RSA:证书签名算法,tomcat建议RSA
-storepass 123456:密钥库密码,也就是等下要生成的test.keystore的访问密码,妥善保管
-validity 3650:证书有效期,3650天,即10年
-keystore ./testKey.jks:要生成的文件的位置,./test.keystore表示存储在当前目录下
-->
然后我们可以看到有提示信息,运行提示信息里面的代码
keytool -importkeystore -srckeystore ./testKey.jks -destkeystore ./testKey.jks -deststoretype pkcs12
可以看到已经成功生成证书"testKey.jks"
2. 配置https连接器
2.1 将生成的testKey.jks密钥库文件拷贝到Tomcat服务器的conf目录下
2.2 修改server.xml文件,配置https连接器
<!-- 注释掉http连接器 -->
<!--
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- 释放https连接器 -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
修改https连接器的端口号(如果URL不想带端口号,则修改成https的默认端口443即可,切记不能设置为80,否则无法访问,因为80是http的默认端口)、秘钥库文件路径,及配置秘钥的口令(就是生成秘钥文件时设置的口令),.pfx格式是同样的设置方式,只需修改证书路径和密码即可
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/testKey.jks"
type="RSA" certificateKeystorePassword="123456" />
</SSLHostConfig>
</Connector>
3. 测试
使用http访问,我们看到是无法访问成功的,返回了报错信息
使用https访问,因我们是自己生成的证书,因此浏览器给了提示信息,
我们无视即可,点击高级-->接受风险继续
可以看到我们通过https成功访问了页面