内网环境Tomcat配置HTTPS,了解一下?

1,629 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、准备

首先你要有个服务器,服务器上要有JDK和Tomcat,JDK和Tomcat的安装请自行百度,这里不赘述。 我的JDK版本为1.8.0_311,Tomcat版本为10.0.14,其他版本请自行验证。配置中我全程使用的是root用户,如果你用的是其他用户,请注意相应的Linux权限问题。因为我用的是java的keytool工具,所以Windows生成证书的命令跟Linux的命令一样,与操作系统无关。

二、为服务器生成自签证书(单双向认证都需要)

1.在/opt目录下创建ca文件夹

目的:方便证书管理,具体放在哪个文件夹没有硬性要求,放在/opt文件夹下是我个人的习惯。

命令

(1)移动到/opt文件夹: cd /opt

(2)创建ca文件夹:mkdir ca

截图在这里插入图片描述

2.创建服务器证书(keystore格式)

命令

(1)移动到刚刚创建的ca文件夹下:cd /opt/ca

(2)利用Java自带的keytool工具创建服务器证书:keytool -genkey -v -alias tomcat -keyalg RSA -ext SAN=ip:82.156.193.157 -validity 365000 -keystore tomcat.keystore

命令参数说明

-genkey:在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书。

-v:显示密钥库中的证书详细信息

-alias:设置证书别名,设置后会替代默认的mykey。

-keyalg:设置秘钥算法。

-ext:扩展,可以设置域名信息与内外网地址。如果是IP方式访问用-ext SAN=ip:你的IP,如果是域名用 -ext SAN=dns:你的域名

-validity:设置证书有效期,最大为9999年。

-keystore:指定密钥和证书库,如果是放到Windows系统的C盘,需要管理员权限。

截图在这里插入图片描述

三、为客户端生成自签证书(仅双向认证需要,单向认证可忽略)

1.创建客户端证书(p12格式)

目的:HTTPS比HTTP协议安全的主要原因就是HTTPS比HTTP多了证书验证这一步,阻止了中间人攻击。HTTPS的认证方式有两种,一是单向认证,二是双向认证。对于安全性要求不高的系统,采用单向认证就足够了,也就是客户端认证服务器端。但是如果想使系统安全性更高,我们就需要利用客户端证书来实现双向认证。

命令

(1)利用Java自带的keytool工具创建客户端证书:keytool -genkey -v -alias client -keyalg RSA -validity 365000 -storetype PKCS12 -keystore client.p12

参数说明

-genkey:在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书。

-v:显示密钥库中的证书详细信息

-alias:设置证书别名。

-keyalg:设置秘钥算法。

-validity:设置证书有效期,最大为9999年。

-storetype:设置密钥库的类型。

-keystore:指定密钥库,如果是放到Windows系统的C盘,需要管理员权限。

截图在这里插入图片描述

2.将p12格式的客户端证书转换为cer格式

目的: p12格式的证书无法直接导入客户端证书(tomcat.keystore)中,需要先转换成cer格式。

命令

(1)p12格式转cer格式:keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer

参数说明

-export:导出证书

-alias:设置别名

-keystore:指定源证书的路径与名称

-storetype:指定源证书的类型

-storepass:验证源证书的密码

-rfc:将以可打印的编码格式输出证书

-file:指定目标证书的路径、文件名和类型

截图在这里插入图片描述

四、将客户端证书导入服务器证书中(仅双向认证需要,单向认证可忽略)

1.客户端证书导入服务器证书

目的:服务器端认证客户端证书。

命令

(1)将客户端证书导入服务器证书中:keytool -import -v -file client.cer -keystore tomcat.keystore

参数说明

-import:导入证书

-v :显示密钥库中的证书详细信息

-file:填写被导入证书的路径与文件名,此处为客户端证书

-keystore:填写目标证书的路径与文件名,此处为服务器端证书

截图在这里插入图片描述

2.查看导入情况

目的:验证证书导入情况

命令

(1)在屏幕打印证书详情:keytool -list -keystore tomcat.keystore

证书信息说明:由于在导入时没有给客户端证书设置别名,因此客户端证书别名默认为mykey

截图在这里插入图片描述

五、Tomcat配置服务器端证书(单双向认证都需要)

目的:通过配置Tomcat的server.xml文件,让Tomcat能够解析服务器证书。其他服务器配置证书的方式请自行百度。

操作步骤

(1)将以下代码加入到Tomcat的server.xml文件中,注意Tomcat 8、9和Tomcat 10的添加写法不一样。配置项“clientAuth”设置为false,即可关闭Tomcat验证

<!--  Tomcat 8、9添加证书  -->
<Connector
	port="443"
	protocol="org.apache.coyote.http11.Http11NioProtocol"
	SSLEnabled="true"
	scheme="https"
	secure="true"
	keystoreFile="/opt/ca/tomcat.keystore"
	keystorePass="123456"
	clientAuth="false"
	SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
     ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"
     truststoreFile="/opt/tomcat.keystore"
 	truststorePass="123456"
 	/>
<!-- Connector参数说明:
Connector参数我只写了我需要的那部分,Connector参数还有很多,具体参数介绍请直接看Tomcat 9的官方说明:https://tomcat.apache.org/tomcat-9.0-doc/config/http.html -->
 	
<!--  Tomcat 10添加证书  --> 	
<Connector
     protocol="org.apache.coyote.http11.Http11NioProtocol"
     port="443"
     clientAuth="false"
     SSLEnabled="true">
          <SSLHostConfig>
               <Certificate
                    certificateKeystoreFile="/opt/ca/tomcat.keystore"
                    certificateKeystorePassword="123456"
                    type="RSA"
                    />
          </SSLHostConfig>
     </Connector>
<!-- Connector参数说明:
Connector参数我只写了我需要的那部分,Connector参数还有很多,具体参数介绍请直接看Tomcat10 的官网说明:https://tomcat.apache.org/tomcat-10.0-doc/ssl-howto.html#Configuration -->

六、客户端安装服务器证书(单双向认证都需要)

1.将服务器证书keystore转为cer格式

目的:cer格式便于在浏览器、Windows系统、iis证书安装,便于用Hbuilder打包安卓APP等(Hbuilder直接用keystore就行) 。

命令: (1)keytool -keystore tomcat.keystore -export -alias tomcat -file server.cer

参数说明:可以参考客户端p12格式转cer格式

截图在这里插入图片描述

2.浏览器、Windows安装服务器证书

这里以Chrome浏览器为例,edge、火狐、360、2435、QQ等浏览器通用,IE浏览器配置方法请自行百度。

(1)复制服务器证书到客户端。我用的是WinSCP将服务器端证书(server.cer)下载到客户端电脑上的。

(2)双击服务器证书文件(server.cer),点击安装证书。 在这里插入图片描述

(3)选择安装证书到当前用户,或全部用户,这里我选择安装给这台电脑上的全部用户 在这里插入图片描述

(4)选择证书存储位置,这里要选择“受信任的根证书颁发机构” 在这里插入图片描述

(5)完成安装 在这里插入图片描述

七、验证奇迹的时刻(客户端成功单向认证服务器!)

打开浏览器,利用HTTPS访问Tomcat服务器的示例项目,可以看到已经实现了HTTPS连接,单向认证已经实现。

截图在这里插入图片描述