![在这里插入图片描述](https://img-blog.csdnimg.cn/20191114222256184.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tsY2Jsbg==,size_16,color_FFFFFF,t_70证书生成方式一,代码生成证书
证书生成方式二,根证书ca生成证书
服务器认证客户端:
服务器端通过根CA给客户端颁发客户端证书,在制作客户端证书时加上和机器相关的信息就可以保证在特定的时候某个帐号只能在这台机器上和服务器交换报文,比如我们用支付宝时必须下载安装数字证书时,可以命名这本证书叫"某某的笔记本"或者是"公司电脑"之类的,就是支付宝给用户颁发证书,只能在这台机器上用,你换了机器就必须重新申请。建立SSL连接时,先是服务器将自己的服务器证书发给客户端,验证通过后,客户端就把自己的客户端证书发给服务器进行验证,如果通过,再进行后面的处理。
客户端安装服务器根证书ca.crt到客户端信任证书库中,服务器端安装服务器根证书ca.crt到服务器信任证书库中。
SSL握手时,服务器先将服务器证书server.p12发给客户端,客户端会到客户端信任证书库中进行验证,因为server.p12是根证书CA颁发的,所以验证通过;然后客户端将客户端证书client.p12发给服务器,同理因为client.p12是根证书CA颁发的,所以验证通过。
上述两种方式中公钥已经提前放到对方的信任库中,代表各自已经提前获取到了对方的公钥。
客户端:发送信任库(trustClient.key)+私钥(客户端证书client.key)到服务端,分别验证服务端的私钥(服务端证书serve.key)和被服务端的信任库(trustServe.key)验证。
私钥相当于私有的证书库,公钥相当于打开私有证书库中任何证书的万能钥匙,信任库收集来自其他证书库的万能钥匙
参考:https://blog.csdn.net/qq_34004946/article/details/89478415