HTTPS概述

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲就是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。采用HTTPS的服务器必须从CA(Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。
Tomcat服务器启动时候会启动多个Connector(连接器),而Tomcat服务器的连接器又分为加密连接器和非加密连机器。Tomcat通过配置加密连接器,实现HTTPS协议。本文利用Java提供的keytool生成数字证书,本地模拟实现HTTPS的服务器配置。

配置Tomcat的HTTPS连接器

生成Tomcat服务器的数字证书

首先为网站生成一份数字证书,使用的命令是:

keytool -genkey -alias tomcat -keyalg RSA

这句命令的意思是使用keytool生成一个名字为tomcat的证书,存放在.keystore这个密钥库中。然后再在服务器中配置加密的连接器。一访问此加密连接器,网站即向你出示一份数字证书,然后浏览器安装这份数字证书,相当于安装此网站的公钥。对于数字证书而言,系统会使用密钥库(keystore)来保存。

java配置ssl证书 java配置https_java配置ssl证书


此时生成的密钥库.keystore默认存放在C:\Users\32120目录下,如下。

java配置ssl证书 java配置https_HTTPS_02


我们还可使用如下命令:

keytool -list -keystore .keystore

查看.keystore密钥库里面的所有证书。

java配置ssl证书 java配置https_java配置ssl证书_03

在服务器中配置加密的连接器

将密钥库剪切,存放在Tomcat服务器下的conf目录下,在server.xml配置加密连接器,以Tomcat8.5.38为例。

java配置ssl证书 java配置https_数字证书_04


提示:配置Connector连接器可参考tomcat文档。

访问加密地址

在客户端安装服务器证书

为了让浏览器信任我们生成的数字证书,需要将数字证书安装到浏览器中,下面我会以IE11浏览器为例进行证书安装说明。这里我本应以Chrome浏览器为例进行讲解的,无奈的是我暂时还不清楚Chrome浏览器是如何安装数字证书的,我还是对IE浏览器比较熟悉,即使IE浏览器早已被市场淘汰了。

  1. 使用IE浏览器访问"https://localhost:8443/"这个URL地址,服务器会给浏览器发送数字证书(公钥),来加密需要发送的数据,但是这个数字证书是通过SUN公司命令生成的,并没有在CA注册,所以浏览器会有如下提示。
  2. 点击转到此网页(不推荐),出现如下界面。
  3. 点击证书错误,出现如下界面。
  4. 点击查看证书,出现如下界面。
  5. 点击安装证书进行安装数字证书,一步一步的详细步骤如下。






    以上步骤即是在客户端安装了一份数字证书,并信任该数字证书。
    证书安装成功后,重启IE浏览器,使用"https://localhost:8443/"访问8443的加密连接器,此时浏览器就不再提示证书错误了,如下图所示:

    此时又会产生一个问题:当浏览器被劫持,所有的不安全证书被允许安装时就又会出现不安全状况。

删除数字证书

操作步骤如下:

java配置ssl证书 java配置https_java配置ssl证书_05


java配置ssl证书 java配置https_服务器_06


java配置ssl证书 java配置https_HTTPS_07


java配置ssl证书 java配置https_服务器_08


删除证书成功,关闭浏览器,再次访问时,又会提示有危险信息!!!

注意:此文配置的只是单向加密连接器。实际开发中应配置HTTPS双向加密连接器