首页 > 代码库 > tomcat配置https单向认证

tomcat配置https单向认证

1. https单向认证原理

  “单向认证”,即“浏览器”验证“服务器”的证书是否合法,从而判断正在访问的网站是否可信。这也是当前网络上最常用的认证方式,GitHub、Google、Twitter、Facebook等均采用此种方式。

  “单向认证”的两个通信实体如下

技术分享

  他们之间的通信过程如下

技术分享

下面给出简要的文字说明

  1. 客户端访问服务器
  2. 服务器响应客户端,发送服务器证书给客户端
  3. 客户端查询“受信任根证书颁发机构”,验证服务器证书
  4. 客户端验证完服务器证书,生成“密钥对”及会话密钥,与服务器协商会话密钥
  5. 会话密钥协商完成,开始安全加密通信

2. 准备证书

  证书需要准备两个

  1. 服务器证书(tomcat为jks格式)
  2. CA根证书

  服务器证书用于浏览器验证服务器身份,CA根证书只是为了让浏览器信任服务器证书。生成服务器证书的方式很多,keytool、openssl、ejbca都可以,具体过程参考我的其他帖子,这里不赘述。我生成的服务器证书名为“tomcat-win.jks”,CA根证书名称是“ruxueCA.crt”。

3. 配置tomcat

  编辑tomcat/conf目录下的“server.xml”,找到如下内容,如被注释,请去掉注释

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\Download\tomcat-win.jks" keystorePass="123456" />

  配置好证书路径和访问密码,启动tomcat。

3. 浏览器访问

  浏览器输入https://localhost:8443,出现如下错误,点击“继续浏览此网站(不推荐)”

技术分享

  可以正常访问tomcat,但出现证书错误提示

技术分享

  点击“证书错误”,出现如下信息

技术分享

  这是因为这个证书是CA颁发给“win.ruxue.online”网站的,而我们访问的域名是“localhost”。修改C:\Windows\System32\drivers\etc目录下的hosts文件,添加如下一行信息。

127.0.0.1 win.ruxue.online

  在浏览器中输入https://win.ruxue.online:8443,依然出现“此网站的安全证书出现问题”的错误提示,同上,点击“证书错误”查看,发现这次的错误不同了。

技术分享

  这是因为浏览器“受信任根证书颁发机构”中并没有颁发“tomcat-win.jks”证书的CA机构信息,浏览器因此认为这个证书有问题,此时我们需要在浏览器的“受信任根证书颁发机构”导入CA根证书“ruxueCA.crt”。

技术分享

  导入成功之后再访问https://win.ruxue.online:8443

技术分享

  没有任何问题了,点击那把绿色的锁,可以看到这个网站的安全证书信息。

技术分享

tomcat配置https单向认证