提到PKI(公钥基础设施)就离不开下面这些概念名词:
对称加密
、非对称加密
、数字信封
、数字签名
、数字证书
等,而之前整理过的vault相关的,本质上也是一种PKI解决方案之一。
之前陆续整理过有关vault的几篇:
Vault---机密信息管理工具安装及常用示例
Vault机密管理工具集群配置示例
vault签发根证书、中间证书、ca证书流程记录
springboot集成springcloud vault读值示例
对称加密
如图所示,甲方(发送放方)利用对称密钥通过加密算法把明文加密,乙方(接收方)接收到密文之后,用相同的对称密钥通过解密算法解析出明文,这个过程就是一个对称加密的过程。比如常用的AES加密,详情见之前写过的一篇:java实现AES对称加密解密
非对称加密
如图所示,非对称加密一般会有一对密钥对,包括公钥(一般给多人使用),私钥(一般只有一人拥有),甲方(发送方)将明文通过公钥加密,乙方接收到密文后通过私钥解密,解析出明文,这个过程即是非对称加密解密,即便是公钥遭到泄露,没有私钥依然解密不了,会更加安全,但是相比对称加密,耗性能会相对大一点,比如常用的RSA加密解密,详情见之前写过的一篇:java实现RSA非对称加密解密
数字信封
考虑到非对称加密的性能问题,所以对称加密和非对称加密组合使用是惯用方法,先通过非对称加密的方式把对称秘钥传送过去,然后后面再用对称加密传输数据。而对称密钥用非对称密钥加密之后形成的密文被称为数字信封。过程如下图:
数字签名
加签验签是为了保证数据的完整性,保证在传输途中没有被修改。
1.先通过非对称加密的方式把明文传送过去
2.发送方把明文经过HASH算法计算出数字指纹
3.发送方利用自己的私钥将数字指纹加密成数字签名,发送给接收方
上面2,3这个过程就是加签的过程
4.接收方收到数字签名之后,用发送方的公钥解密出数字指纹
5.接收方把明文通过HASH算法计算出数字指纹和收到的数字指纹作比对,如果一样则数据没有被修改
上面4,5这个过程就是验签
过程如下图所示:
需要注意的是,非对称明文加密解密这个过程中传输明文时用的是接收方的公钥加密,接收方的私钥解密,为的是保证数据只有接收方才能解密,而数字签名非对称加密解密是用的发送方的私钥加密,发送方的公钥解密来实现加签验签的,为的是可以被多人解密,所以用公钥,这个地方可以看出加密解密和加签验签虽然用的都是加密解密算法,但是作用是不一样的。
数字证书
如上图所示,数字证书里面是含有签名和公钥信息的,证书系统是个一分二二分多的多级系统,为简单理解,用根证书,中间证书,三级证书这三级来表示。
根证书用私钥可以往下级签发出中间证书,得到中间证书和中间证书的私钥,中间证书利用自己的私钥又可以往下级签发出三级证书,证书校验时,根证书利用自己证书里的公钥验证中间证书是否是自己签发的,中间证书利用自己证书里的公钥验证三级证书是不是自己签发的,这样就能保证证书系统不会被冒充。
openssl的sime加签验签就是利用这个原理来判断的。比如下面两句linux命令
加签:
openssl smime -sign -md sha256 -text -in index.txt -out index.cms -signer inter.crt -inkey inter.key -certfile root.crt
验签:
openssl smime -verify -CAfile root.crt -in index.cms -out index_verify.log
证书的生命周期
一般可信任的证书是统一由权威的证书分发机构签发的,如果是内部系统,vault系统分发的证书也是可以用的。
证书加签验签流程图解
下图中展示的即是用证书私钥加签,证书公钥验签的流图图解
VAULT方案架构图解
HTTPS
整个加密解密加签验签以及证书系统应用最常见的例子就是HTTPS了。HTTPS在HTTP的基础上加了一层ssl协议,即是加了证书非对称加密解密,对称加密解密这些保护措施,解决了HTTP的三个痛点:
1.加密解密解决明文被监听的问题
2.加签验签验证数据完整性来解决数据可能被篡改的问题
3.证书系统用来验证信息来自通信方,解决信息可能遭遇伪装问题
============20220705-补充https双向认证流程更新=======================
1、客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。
2、服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书
3、客户端使用服务端返回的信息验证服务器的合法性,包括:
证书是否过期
发型服务器证书的CA是否可靠
返回的公钥是否能正确解开返回证书中的数字签名
服务器证书上的域名是否和服务器的实际域名相匹配
验证通过后,将继续进行通信,否则,终止通信
4、服务端要求客户端发送客户端的证书,客户端会将自己的证书发送至服务端
5、验证客户端的证书,通过验证后,会获得客户端的公钥
6、客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择
7、服务器端在客户端提供的加密方案中选择加密程度最高的加密方式
8、将加密方案通过使用之前获取到的公钥进行加密,返回给客户端
9、客户端收到服务端返回的加密方案密文后,使用自己的私钥进行解密,获取具体加密方式,而后,产生该加密方式的随机码,用作加密过程中的密钥,使用之前从服务端证书中获取到的公钥进行加密后,发送给服务端
10、服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的密钥,在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全。