基于TomCat的https访问配置

本地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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值