公钥加密,私钥解密,私钥只能自己持有。
A,B互相传输数据的过程中,A有自己的私钥和B的公钥,B有自己的私钥和A的公钥。
如果A传输数据到B,A用B的公钥对数据加密,A用A的私钥对数据进行签名,然后B收到数据之后,B用B的私钥对数据进行解码,B用A的公钥对数据验签,加密保证了数据免遭窃取、更改或破解;签名保证这个数据在传输过程中不被篡改,确认这个数据的来源者就是A。
CA(Certificate Authority)是认证机构,负责签发和管理数字证书,且具有权威性和公正性的第三方信任机构。A将自己的公钥提供给CA,CA会用自己的私钥对A的公钥进行签名,就相当于A拿着自己的出生证明,到警察局去申请自己的身份证,这里的警察局就相当于CA,警察局颁发给A的身份证就相当于通过CA签名的A的公钥。
当B收到A发来的消息之后,B会用A的公钥验证这个消息的是不是由A发过来的,因为如果有其他人假冒A用B的公钥加密后的数据给B发消息,那么这时就可以用A的公钥来验证消息中私钥的签名是不是A的。
拿https的步骤来说,当B拿到了A的证书(包含公钥),在https中B就会进行校验,走证书链逐级验证,确认证书的真实性,再用证书公钥验证签名,就确认了A的身份,如果不是则浏览器会弹出,此证书是不信任,可以选择接受,或者不接受,接受则继续通信。
操作系统和浏览器都内置了各大 CA 的根证书,上网的时候只要服务器发过来它的证书,就可以验证证书里的签名,顺着证书链一层层地验证,直到找到根证书,就能够确定证书是可信的,从而里面的公钥也是可信的。