level 300

为什么需要CA?如果使用过PGP的情况下,是不需要CA的,我和你认识,我把我的公钥,你把你的公钥,我们互相交换下即可以。但是有两个方面的问题:

     一个是公钥的交换数量是n(n-1)/2。另一个是如何认定我拿到的公钥确实是你的。

首先所有的实体是要产生一个自己的RSA 密钥对,也就有了公钥和私钥。而CA只是负责验证实体公钥的持有者是真实的。此外实体和实体之间不用再相互认证对方,只需要实体和CA的认证就可以了。避免了交换数量问题。

关于数字证书最重要的三件事就是:设备信息、实体的公钥、实体用私钥产生的签名

为了验证数字签名,需要知道发送者的公钥。第一个特点:这个公钥不仅要以可扩展的方式被分发到公共区域。第二个特点是可信的发送者发送的公钥,而不能是别人伪装的公钥

CA:用于维护信任链的顶端作为一个信任源,用CA只是证明这个实体公钥的持有者是谁?

当实体之间想建立连接的时候,使用证书验证,他们使用CA作为一个第三方来确保:这个公钥确实是对方的,而不是个中间人。

1、实体向CA提交:第一次数字签名

将明文的实体信息:

明文实体PKCS#10:
device info(至少包含设备名字,还可以有很多,比如:组织、地点、省市、国家等)
key size(密钥大小,必须的)
device public key(必须的,)
challenge password(随机数口令。CA可以通过随机数口令来验证这个设备,也可以通过这个随机数口令吊销设备的数字证书)

先hash,之后用实体的私钥加密,即产生了数字签名。

2、发送给CA的是:明文的实体信息+数字签名

3、CA对实体的验证:通过随机数口令,还有用明文的实体公钥解密设备签名得到一个hash值,然后与实体明文提交的信息做hash,看两个hash值是否相等。

4、CA产生一个随机的密钥random key

5、CA Info:是明文

serial number(整个CA域内唯一序列号)
available date of certificate(证书有效期)
HMAC algorithm (HMAC 功能)
CRL location(证书吊销列表)

6、CA将实体PKCS#10+CA info +random key用HMAC 功能算出一个hash值,叫HAMC签名,出于下面的分别将称之为HMAC-A

7、CA用自己的私钥加密random

8、那么一个实体证书包含了上面的:1+5+6+7

9、在设备之间的验证:首先设备都安装有CA的根证书,根证书包含了CA的公钥

10、设备A将自己的证书发给设备B,CA 用公钥解密7

11、然后将PKCS#10+CA info +random key用HMAC 功能算出一个hash值,出于分别将称之为HAMC-B

12、HAMC-A==HAMC-B证书是可信的

clip_p_w_picpath001

13、此时实体证书的公钥被确认为确实是实体A所拥有。因为CA只是为了证明实体公钥的持有者是谁的问题。

14、这里看到CA的私钥只是用于加密random key。而不是将证书做个hash,然后用CA的私钥加密这个hash值(而很多书笼统的这样说)。这个是我一直疑惑的问题。到底是CA的私钥加密了random key还是CA的私钥加密了hash值呢???

15、上面的问题解决了公钥的持有者和公钥的分发问题:一旦实体之间都有了对方的公钥,用这个公钥加密对方实际数据流的对称密钥,双方的数据加密用是的这个对称密钥