发送方使用自己的私钥对消息进行签名。消息使用收件人公钥加密。证书包含公钥。假设发送者的公钥(与用于签署消息的发送者私钥相对应)也包含在证书中。接收方使用自己的私钥(对应于其证书中的公钥)解密传入的消息。接收方使用发送者证书中的发送者公钥来验证签名。话虽如此,您可以想象一个通用的情况,每个人都可以发送和接收电子邮件。因此,每个人都有一对密钥(其中公共部分在证书中),用于加密和解密电子邮件(Bob的公钥用于加密发送给Bob的电子邮件,而Bob使用相应的私钥将它们解密,即阅读电子邮件)。此外,每个人都有一对用于签名的密钥(Bob使用他的私钥签名他发送的消息,Alice使用Bob的公钥验证据称由Bob计算的签名)。问题是:Bob会有两个密钥对(用于加密/解密和签名/验证),还是仅使用一个密钥对来完成这两个工作?恰好,RSA公共加密算法和RSA签名算法可以使用同一类型的密钥,称为“RSA密钥”。因此,这是可行的,并且实际上经常发生。然而,一般来说,签名密钥和加密密钥具有不同的生命周期和管理程序。在商业环境中,方向会在保险柜中保存用于加密的所有私钥的副本,因为丢失加密密钥意味着失去数据。员工可能会变得“不可用”(员工被解雇,员工退休,员工被公共汽车撞击……)。相反,当签名密钥丢失时,以前发出的签名仍然是有效和可验证的,因此只需创建新的密钥对即可生成其他签名。此外,只有没有密钥在某个地方的情况下,数字签名才可能具有强有力的法律地位。因此,一般建议将加密和签名密钥分开。使用相同的密钥来完成两者是近似值,可能会产生不需要的副作用(例如数据丢失或缺乏法律价值)。根据上下文,这可能是个问题或不是个问题。
X509证书包含公钥。要进行加密,您需要使用收件人的公钥,该公钥通常从其证书中获取。要签名,您需要使用自己的私钥,通常从安全存储中获取。收件人使用您的公钥(通常从您的证书中获取)验证签名。这些是基础知识。