数字签名
用私钥对数据的摘要进行签名,公钥对数据进行验证
作用
- 证明消息的发送方是你认为的发送方
- 确保消息没有被篡改
认证机构(CA)
证书
包含: 公钥(记住证书中是带有公钥的),公钥的数字签名,公钥拥有者的信息
为什么需要CA
防止中间人攻击
CA的作用
颁发证书,验证证书
如何生成证书?
- 服务器将公钥A给CA(公钥是服务器的)
- CA用自己的私钥B给公钥A加密,生成数字签名A
- CA把公钥A,数字签名A,附加一些服务器信息整合在一起,生成证书,发回给服务器。 注:私钥B是用于加密公钥A的,私钥B和公钥A并不是配对的。
如何验证证书?
- 客户端得到证书
- 客户端得到证书的公钥B(通过CA或其它途径)
- 客户端用公钥B对证书中的数字签名解密,得到哈希值
- 客户端对公钥进行哈希值计算
- 两个哈希值对比,如果相同,则证书合法。 注:公钥B和上述的私钥B是配对的,分别用于对证书的验证(解密)和生成(加密)。
证书作废
当用户私钥丢失、被盗时,认证机构需要对证书进行作废(revoke)。要作废证书,认证机构需要制作一张证书作废清单(Certificate Revocation List),简称CRL
证书格式
X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容
编码格式
同样的X.509证书,可能有不同的编码格式,目前有以下两种编码格式.
-
PEM PEM - Privacy Enhanced Mail,打开看文本格式,以”—–BEGIN…“开头, “—–END…“结尾,内容是BASE64编码. 查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout Apache和*NIX服务器偏向于使用这种编码格式.
-
DER DER - Distinguished Encoding Rules,打开看是二进制格式,不可读. 查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout Java和Windows服务器偏向于使用这种编码格式.
总结:
-
信息 + HASH = 摘要 摘要 + 私钥 = 数字签名(给收方做对比用的,验证收发内容是否一致)
-
公钥 + 相关信息 + CA私钥 = 数字证书(验证发送者是否正确,是可信任的公钥)