Springboot的SSL双向认证

单项认证和双向认证区别(转载):https://blog.csdn.net/ons_cukuyo/article/details/79171418

注意事项:

    在看完上边单双向认证过程的区别之后,会发现在认证过程中,有公钥和私钥的概念,而何时谁应该持有谁的公钥或者私钥呢?

1、如果客户端想验证服务端证书,客户端需要安装服务端的公钥文件(cer)(或者服务端证书是官方CA颁发的,客户端可以直接联网认证),因为服务端会将自己的随机数等信息使用自己的私钥加密之后发给客户端,而客户端要想解开这些数据,必须持有服务端的公钥才可以,之后服务端验证通过。

2、服务端想验证客户端证书,则需要将客户端的证书的公钥文件放到服务端trustStore信任库中,当客户端请求访问服务端时,会使用自己的私钥加密随机数、ssl版本等信息发送给服务端,服务端只有持有客户端的公钥才能解开这些数据,验证才能通过。

相关概念:

1、kestore(密钥库)和truststore(信任库)的区别:

     Keystore,用来存放服务端证书,可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息。

     truststore是放服务端信任的客户端证书的一个store,里存放的是只包含公钥的数字证书,代表了可以信任的客户端证书,     而keystore是包含私钥的。

2、证书文件 -- cer文件和pfx文件的区别

    作为文件形式存在的证书一般有这几种格式:

  (1)、带有私钥的证书

        由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作 为证书文件后缀名。

  (2)、二进制编码的证书

      证书中没有私钥,只包含公钥,DER 编码二进制格式的证书文件,以cer作为证书文件后缀名。

  (3)、Base64编码的证书

          证书中没有私钥,只包含公钥,BASE64 编码格式的证书文件,也是以cer作为证书文件后缀名。

3、springboot中的application.properties

      keyStore密钥库,存放了服务端证书的私钥、公钥和证书。

        server.port=8080

        server.ssl.key-store=classpath:a.pfx

        server.ssl.key-store-password=aaa123

        server.ssl.key-alias=1

        server.ssl.keyStoreType=JKS

   trustStore信任库,存放了服务端信任的客户端证书的公钥文件

        server.ssl.trust-store=classpath:b.pfx

        server.ssl.trust-store-password=aaa123

        server.ssl.client-auth=need

        server.ssl.trust-store-type=JKS

        server.ssl.trust-store-provider=SUN


下面是详细的配置过程(假设单向认证已经通过),此时服务端已经有了server.key.p12密钥库,且里面包含了服务端的证书。本例keyStore和trustStore使用的是一个库,当然也可以使用不同库。

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

1、生成客户端证书

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

            Springboot的SSL双向认证_第1张图片

2、将客户端证书安装到本地,双击qq.key.p12,会出现安装过程,密码就是刚才输入的密钥口

令,安装到个人证书。

             Springboot的SSL双向认证_第2张图片


            Springboot的SSL双向认证_第3张图片

            Springboot的SSL双向认证_第4张图片

            Springboot的SSL双向认证_第5张图片

            Springboot的SSL双向认证_第6张图片

            Springboot的SSL双向认证_第7张图片 

3、添加客户端证书到服务端信任库,查看方式在连接内有。

    a)  首先导出客户端证书的公钥文件

        keytool -keystore E:\5\qq.key.p12-export -alias qq -file E:\5\qq.cer

    b)  将公钥文件导入信任库

        keytool -import -v -fileE:\5\qq.cer -keystore E:\5\server.key.p12

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

        server.port=8080

        server.ssl.key-store=classpath:server.key.p12

        server.ssl.key-store-password=aaa123(改为自己的密码)

        server.ssl.key-alias=server

        server.ssl.keyStoreType=JKS

 

        server.ssl.trust-store=classpath:server.key.p12

        server.ssl.trust-store-password=bbb123(改为自己的密码)

        server.ssl.client-auth=need

        server.ssl.trust-store-type=JKS

        server.ssl.trust-store-provider=SUN

 

5、360浏览器中输入https://192.168.16.21:8080/(本机IP),因为我们自己办法的证书不是官方CA颁发的证书,使用chrome访问会被直接拦截掉,360会提示确认证书,选中刚才安装的qq证书即可,至此服务端的双向认证完成。

你可能感兴趣的:(Springboot的SSL双向认证)