假设A和B通信,B是一个网站步骤:
1. A--->B: Hello,所支持的算法列表
2. B--->A: 确定算法,B的证书(包含B的公钥)
3. A--->B: 生成一些算法的随机值,并用B的公钥加密上述步骤应该大致没错吧
我想问的是,在第2步,B把自己的证书交给A,这个证书中的公钥是明文的,还是密文的?
也就是说A是否需要用根证书解密才能拿到B的公钥?
1. A--->B: Hello,所支持的算法列表
2. B--->A: 确定算法,B的证书(包含B的公钥)
3. A--->B: 生成一些算法的随机值,并用B的公钥加密上述步骤应该大致没错吧
我想问的是,在第2步,B把自己的证书交给A,这个证书中的公钥是明文的,还是密文的?
也就是说A是否需要用根证书解密才能拿到B的公钥?
答:密文的,一般采用DES加密后的数据.
流行的做法是,在数据流头部存放的是DES加密后的密钥数据.
跟在其后的数据是实际包体,一般采用 RSA加密,你应该把头部的密钥数据用DES还原成明文,然后代入RSA算法解开包体
A拿到B的证书后,怎么确认这个证书是不是伪造的?资料上说是通过根证书,B的证书是经过CA签名的,这个“签名”的具体过程是怎样的?我的理解是这个所谓“签名”就是指用CA的私钥对证书加密,然后通信时A拿到B的证书后,用根证书中CA的公钥去解密,如果能够解开,就说明证书是真的。那么这样B的证书就应该是加密的呀,为什么我看到的B的公钥是明文的呢,难道签名是部分加密?
------------------------------------------
A在建立连接之前,先安装一个B的CA根证书,就可以了。这是A端单向认证
证书中的公钥是明文的,签名是对摘要(MD5 or SHA)进行签名