目录
本地https访问配置
Tomcat运行在本地,进行相应配置使得可以通过https://127.0.0.1进行访问
单向验证
仅浏览器验证服务器(即本地Tomcat)的身份,而服务器不认证浏览器的身份。
产生证书
为服务器生成证书
keytool -genkeypair -alias tomcat -keyalg RSA -keystore d:\CA\tomcat.keystore -storetype pkcs12
注意名字与姓氏选项需要设置为服务器ip或域名,即127.0.0.1,否则浏览器在校验证书真实性的时候,会发现名称与访问域名对不上,从而仍然提示连接不安全。
密码需要记录,之后会用到,本例中为123456。
若提示找不到keytool,检查环境变量中的JAVA相关变量是否正常,keytool位于JAVA安装路径的bin文件夹中,也可直接cd至该文件夹下运行。
server.xml配置
配置相关的端口,server.xml位于tomcat的conf文件夹中。
默认情况下8443端口被注释,取消注释并修改为以下配置,其中的密码是之前在生成证书时的密码,即123456。
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="D:/CA/tomcat.keystore"
keystorePass="123456" />
试运行
此时启动tomcat
cmd在bin路径中执行
startup
首先访问127.0.0.1:8080端口,看是否报错
若报404错误,应该是端口占用问题,可参考下文进行解决
https://blog.csdn.net/qq_37489565/article/details/85196403
一切正常后,访问https://127.0.0.1,此时会提示
导入证书
这是由于未在本地安装证书导致的,需要将前文生成的.keystore文件导出为.cer格式的证书进行导入
keytool -exportcert -alias tomcat -keystore d:\CA\tomcat.keystore -file d:\CA\tomcat.crt
打开生成的.cer文件,选择安装证书,之后根据使用的是当前用户还是计算机上的所有用户分别选择用户和计算机,之后选择导入受信任的根证书颁发机构,一路下一步/确定即可。
测试
再次访问https://127.0.0.1,应该一切正常。
双向验证
创建证书
为客户端创建相应的证书,此处即为访问的浏览器创建证书
keytool -genkey -keyalg RSA -alias client -keystore D:\CA\client.p12 -storetype pkcs12
此处名字可随意填写,因为产生的证书的登陆名和用户名均为填写的名字(此例中为client),已经存入了信任链中,即用这个证书进行登陆的在服务器解析得到的登陆名都是client,与服务器中信任证书的名字相同。
为方便将证书导入,采用.p12格式
加入服务器信任链
首先导出信任证书
keytool -exportcert -alias client -keystore D:\CA\client.p12 -file D:\CA\client.crt
将证书添加入服务器证书的信任链中
keytool -importcert -file D:\CA\client.crt -keystore D:\CA\tomcat.keystore
此时由于是将客户端证书导入服务器证书,因此密码为服务器证书的密码。
server.xml配置
修改server.xml中443端口相关代码如下
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="D:/wzt/apache-tomcat-8.5.13/CA_local/tomcat.keystore"
keystorePass="123456"
truststoreFile="D:/wzt/apache-tomcat-8.5.13/CA_local/tomcat.keystore"
truststorePass="123456" />
clientAuth设置为true表示此时服务器也要对客户端(此例中为浏览器)进行身份验证。
其中的truststoreFile即指服务器所采纳的信任链来源,即其中包括了服务器所信任的所有根证书机构以及他们的公钥。
浏览器导入证书
双击生成的.p12文件,一路next,私钥密码即为创建时设置的密码。
随后访问https://127.0.0.1,浏览器会提示选择登陆证书,选择client即可。
此时应能正常访问。
其他
chrome浏览器可能仍然提示链接不安全,这是由于chrome内部配置了一系列信赖的证书颁发机构,除此之外的机构哪怕手动添加入计算机的证书信任链中也不被认可,但不会阻断访问,只是标出不安全。要想解决需采用在认证机构购买的证书。
这也是为何采用chrome访问各种政府网站,安装证书后仍然提示不安全的基本原因。
可采用IE访问,若无异常即达到了配置效果。
删除证书
强烈建议在试验完成后将导入的证书进行删除,防止日后出现问题。
win+R->certmgr.msc
在受信任的根证书颁发机构中找到127.0.0.1,删除即可。
在个人中找到client,删除即可。
服务器https配置
接下来在服务器中配置,以远程通过https访问,为保护数据安全,进行双向访问配置。
服务器证书
为服务器端生成证书
keytool -genkeypair -alias tomcat -keyalg RSA -keystore tomcat.keystore -storetype pkcs12
此时名字为服务器ip或绑定域名,其余同上
客户端证书
为客户端生成证书
keytool -genkey -keyalg RSA -alias client -keystore client.p12 -storetype pkcs12
同样的,为方便导入,生成.p12格式
添加信任链
首先将客户端证书添加入服务器证书的信任链中
导出.cer证书
keytool -exportcert -alias client -keystore client.p12 -file client.crt
导入服务器证书的信任链中,注意更改别名(alias),否则默认为mykey,会与电信平台的证书冲突
keytool -import -alias client -file client.crt -keystore tomcat.keystore
客户端证书仅为了通过https远程访问服务器,若无此需求,可不添加。
同时,为保证电信平台的推送不被拒绝,需要添加电信平台的证书,相关证书可在电信平台帮助文档中下载。
keytool -import -alias dianxin -file aep-msgpush.crt -keystore tomcat.keystore
此处将别名定位dianxin,防止冲突
可通过以下命令查看证书详情
keytool -list -rfc -keystore tomcat.keystore
应该有三个key,一个是tomcat的私钥,另外两个分别是client和电信的公钥。
添加公钥
同时将tomcat的公钥导出,并添加进电信平台的网页中,用于电信平台在传输电信平台的证书过程中进行加密,从而服务器利用tomcat的私钥进行解密,就可以得到电信平台的证书。
导出证书
keytool -export -v -alias tomcat -file tomcat.cer -keystore tomcat.keystore
通过openssl转换成pem公钥文件,这一步最好在服务器上完成,centos内置了openssl。