SpringBoot的SSL个人CA签发二级证书(动态添加客户端证书)

当我们的服务端部署完成运行起来之后,trustStore信任库已经建立,受信任的客户端证书已经确定下来,如果我们想再添加一个受信任的客户端证书,又不想停掉服务端,这时就可以使用个人CA根证书签发二级证书的方法。当然官方CA更好,但是相比个人CA官方CA不太方便。

其实还有一个方法实现动态添加服务端信任的客户端证书,就是用代码实现trustStore信任库热加载,网上也有相关的文章,但是相比签发二级证书的方式,性能低很多,也麻烦很多。因为每次服务端的认证都会触发服务端扫描trustStore信任库,判断当前访问的客户端是否在信任库内。

本实例假设SSL的单向认证已经建立,已经有了一个server.key.p12服务端keystore。

单向认证可查看连接: https://blog.csdn.net/weixin_41917987/article/details/80987835

本人遇到坑得到的结论,如果你对相关概念不是很明确,可以看一下本人写的上一篇文章开头:https://blog.csdn.net/weixin_41917987/article/details/80988197

1、创建个人CA根证书,用于给需要新添加的客户端证书签名。

    keytool -genkey -v -alias ca -keyalg RSA -storetype PKCS12 -keystore E:\7\ca.key.p12

                

2、将CA根证书导入到服务端的信任库中,本例keyStore和trustStore使用的是一个库,当然也可以使用不同库。

         a)导出CA根证书的公钥文件

            keytool -keystore E:\7\ca.key.p12-export -alias ca -file E:\7\ca.cer

         b)将cer文件导入到trustStore信任库中

            keytool -import -v -file E:\7\ca.cer-keystore E:\7\server.key.p12

3、创建客户端证书

    keytool -genkey -v -alias qq-keyalg RSA -storetype PKCS12 -keystore E:\7\qq.key.p12

             

4、使用个人CA根证书给客户端证书签名,因为我们不会将新建的客户端证书导入到服务端的信任库中,但是我们又想让服务端信任新建的客户端证书,那么使用服务端已经信任的CA根证书给新建的客户端证书签名,就可以了。

         a)生成签名请求,生成的是一个CSR文件

            keytool -certreq -alias qq -keystore E:\7\qq.key.p12-file E:\7\qq.csr -v

             

         b)使用CA根证书给客户端证书签名,得到的cer文件就是签名后的公钥证书

           keytool-keystore E:\7\ca.key.p12 -gencert -alias ca -infile E:\7\qq.csr -outfile E:\7\qq.cer

         c)将签名后的cer文件导入到qq.key.p12文件中,因为qq.key.p12是客户端证书,需要安装在客户端,但是

qq.key.p12中的公钥文件还是qq签发的,并没有被修改,需要我们将cer文件导回,将原来的公钥替换掉才可以。

           keytool -import -v -file E:\7\qq.cer -keystoreE:\7\qq.key.p12

d) 查看被签名后的证书详情,扩展里边证书的发布者已经修改为ca

            keytool -list -v -keystore E:\7\qq.key.p12 -storepass qqqq123

            

5、双击qq.key.p12文件安装新建的客户端证书,安装到个人证书,前面安装过程已有,不再赘述。

6、在springboot的helloworld项目中的application.properties配置文件中配置以下信息,同时将刚生成的server.key.p12文件放到resources目录下,启动项目

 server.port=8080
 server.ssl.key-store=classpath:server.key.p12
 server.ssl.key-store-password=dzm123
 server.ssl.key-alias=server
 server.ssl.keyStoreType=JKS

 server.ssl.trust-store=classpath:server.key.p12
 server.ssl.trust-store-password=dzm123
 server.ssl.client-auth=need
 server.ssl.trust-store-type=JKS
 server.ssl.trust-store-provider=SUN
可以看到,我们没有将qq.key.p12文件添加到trustStore信任库中,但是qq的证书已经受服务端信任,因为给qq签名的CA根证书已经受trustStore信任。


        

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在使用SpringBoot开发Web应用时,为确保数据传输的安全,需要通过证书对网站进行加密和验证。SSL证书可以认证服务器的身份,并通过加密机制,保证数据传输的私密性和完整性。SpringBoot支持使用自签名证书和第三方证书来实现SSL证书的配置。 配置自签名证书步骤如下: 1. 创建keystore文件:通过keytool命令生成一个用于存储SSL证书的keystore文件; 2. 配置ssl属性:在application.properties或application.yml中添加以下配置信息: server.port: 443 #HTTPS默认端口 server.ssl.key-store: classpath:ssl/keystore.p12 #证书存储路径 server.ssl.key-store-password: password #证书密码 server.ssl.key-store-type: PKCS12 #证书类型 server.ssl.key-alias: tomcat #证书别名 server.ssl.enabled=true #启用SSL 配置第三方证书步骤如下: 1. 申请证书:向第三方证书提供商购买SSL证书; 2. 导入证书:将证书导入到keystore文件中,可使用keytool命令导入; 3. 配置ssl属性:在application.properties或application.yml中添加以下配置信息: server.port: 443 #HTTPS默认端口 server.ssl.key-store: classpath:ssl/keystore.p12 #证书存储路径 server.ssl.key-store-password: password #证书密码 server.ssl.key-store-type: PKCS12 #证书类型 server.ssl.key-alias: tomcat #证书别名 server.ssl.enabled=true #启用SSL 在以上配置完成后,即可启动SpringBoot应用程序,并通过https://localhost:443进行访问,访问时可以看到浏览器中有加密锁标记,表示数据已经开始加密传输。同时,也可使用在线工具或postman等第三方工具进行测试。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值