learning_notes

学习笔记

View project on GitHub

数字签名

用私钥对数据的摘要进行签名,公钥对数据进行验证

作用

  1. 证明消息的发送方是你认为的发送方
  2. 确保消息没有被篡改

认证机构(CA)

证书

包含: 公钥(记住证书中是带有公钥的),公钥的数字签名,公钥拥有者的信息

为什么需要CA

防止中间人攻击

CA的作用

颁发证书,验证证书

如何生成证书?

  1. 服务器将公钥A给CA(公钥是服务器的)
  2. CA用自己的私钥B给公钥A加密,生成数字签名A
  3. CA把公钥A,数字签名A,附加一些服务器信息整合在一起,生成证书,发回给服务器。 注:私钥B是用于加密公钥A的,私钥B和公钥A并不是配对的。

如何验证证书?

  1. 客户端得到证书
  2. 客户端得到证书的公钥B(通过CA或其它途径)
  3. 客户端用公钥B对证书中的数字签名解密,得到哈希值
  4. 客户端对公钥进行哈希值计算
  5. 两个哈希值对比,如果相同,则证书合法。 注:公钥B和上述的私钥B是配对的,分别用于对证书的验证(解密)和生成(加密)。

证书作废

当用户私钥丢失、被盗时,认证机构需要对证书进行作废(revoke)。要作废证书,认证机构需要制作一张证书作废清单(Certificate Revocation List),简称CRL

证书格式

X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容

编码格式

同样的X.509证书,可能有不同的编码格式,目前有以下两种编码格式.

  1. PEM PEM - Privacy Enhanced Mail,打开看文本格式,以”—–BEGIN…“开头, “—–END…“结尾,内容是BASE64编码. 查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout Apache和*NIX服务器偏向于使用这种编码格式.

  2. DER DER - Distinguished Encoding Rules,打开看是二进制格式,不可读. 查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout Java和Windows服务器偏向于使用这种编码格式.

总结:

  1. 信息 + HASH = 摘要 摘要 + 私钥 = 数字签名(给收方做对比用的,验证收发内容是否一致)

  2. 公钥 + 相关信息 + CA私钥 = 数字证书(验证发送者是否正确,是可信任的公钥)