tomcat开启https
tomcat默认是不支持https访问的,(至少我下载的是这样)
如果需要打开,就修改%TOMCAT_HOME%/conf/server.xml文件,添加如下配置:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="C:\\code\\tomcat.keystore" keystorePass="qweasdzxc"
truststoreFile="C:\\code\\tomcat.keystore" truststorePass="qweasdzxc"
/>
其中port是https访问的端口号,可以设置。
cilientAuth是否开启客户端认证,如果为true则要求客户端持有证书秘钥才能访问服务器,即双向认证;
keystoreFile为服务器证书库文件的路径,keystorePass是该证书库的密码;
truststoreFile为信任的证书库文件路径,truststorePass为密码;
所以为了能够使用https进行请求,还需要新建客户端和服务器的证书并存入证书库文件中,所幸jdk中 提供了生成证书的工具keytool.
keytool命令属性介绍:
这里因为我配置了环境变量所以我可以在根目录使用keytool命令,下面介绍如何生成证书。
1、生成服务器证书
命令中test为生成的一天证书的别名,RSA算法名称 keystore为文件路径,会生成文件,36500位证书有 效期限,以天为单位。
执行命令后需要设置口令,就是密码。
名称和姓氏需要输入你服务器的地址,这里我设置的时本地。
下面的单位名称组织名称等可以不填写,
确认所输入的内容,最后输入生成的服务器证书的秘钥口令,我这里输入了和服务器证书一样的口令, 都是qweasdzxc。
成功后的文件:
2、生成客户端证书
基本上与服务器证书生成差不多,只不过这里设置了证书的格式和文件格式;
这里的名称和姓氏可以随意填写,也可以不填。
生成的文件:
3、将客户端证书导入客户端(浏览器)
双击testkey.p12文件导入证书,一直点击下一步,输入证书密码,完成导入。
4、设置服务器端信任客户端证书
由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任证。 因不能直接将PKCS12格式的证书库导入服务器证书库,将客户端证书导出为一个单独的cer文件。
一、导出cer证书文件
其中qweasdzxc为密码
二、将cer文件导入到服务器证书库
5、把服务器证书导出为cer文件,并且在客户端安装
6、在客户端中添加服务器端证书认证
双击test.cer文件导入证书,点击安装证书,
路径选择受信任的根证书颁发机构,完成导入。
至此证书问题已经解决,只需要按照前面所说的将tomcat配置即可实现https访问,如果将cilientAuth设为 false,则客户端不需要安装证书即可访问服务器,如果将clientAuth设为true,则需要将服务器可信任的证 书导入到浏览器,就可以实现与服务器通信,如果没有则会访问不到服务器。
不过,在我将cilientAuth设为true,导入客户端证书,而且还是服务器端可信的证书时,使用谷歌和火狐 浏览器依然会出现不安全的链接,好像是因为我的证书颁发者和证书的所属单位导致的,这个需要进一步 实验,不过在除了这两个浏览器之外的360急速、360安全、edge、ie等浏览器显示的时安全链接。