工作日记:内网环境Java生成自签证书以及Tomcat配置证书流程

一、准备

首先你要有个服务器,服务器上要有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连接,单向认证已经实现。
截图
在这里插入图片描述

八、验证究极奇迹的时刻(客户端与服务器双向认证!)

百亿须弥山,百亿日月,名为三千大千世界。这世界里有多少种服务器,我们无从得知。每种服务器又有多少种配置我们也无从得知。所以我只介绍四款主流服务器的客户端认证配置项。
文章尚未完成,最后更新日期为:2022-01-19 10:46:50

1.Tomcat服务器开启客户端认证

2.Nginx服务器开启客户端认证

3.Apache服务器开启客户端认证

4.Microsoft IIS 服务器开启客户端认证

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达娃里氏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值