如果服务器正在发送其数字签名,则在其中向客户端提供数字签名。
是在server_hello消息之后,因为在那里交换证书的公钥,这是解密数字签名所需的,还是带有包含公钥的初始证书。
如果密码套件是在change_cipher_spec协议后相互确认的,那么使用哪种哈希算法对数字签名进行哈希处理?
发布于 2015-04-14 07:16:44
没有单独的“数字签名交换”。证书是一个自成一体的东西;它包含一个“颁发者”字段(带有签名的CA DN )和一个“签名”字段(带有来自该CA的签名)。服务器不只是在ServerCertificate消息中发送证书;它发送整个证书链,首先是他们的证书,然后是他们的CA,然后是CA的CA,然后继续到信任根(服务器希望客户机信任它)。
对于DHE和ECDHE (它们有用于密码参数交换的签名),这些参数上的签名是包含参数的ServerKeyExchange消息的一部分。同样,没有单独的签名交换。
至于使用哪种哈希算法:这实际上与密码套件并没有本质上的关系,因为证书签名是X.509。签名算法也包含在强制证书字段中。X.509证书包含验证它所需的所有信息,但颁发者的公钥除外。某些密码套件不允许使用正确的算法签名的证书,但这会在稍后出现--您仍然可以在获得证书链后立即验证签名。
响应您的评论:签名验证证书,而不是服务器。服务器被隐式验证,因为其他操作证明它们拥有与该证书中的公钥相对应的私钥。作为一个单独的问题,在任何时候都不能用私钥加密;这是一个流行且错误的签名概念。签名算法接收消息(不是散列)并输出签名;任何散列都是签名算法的一部分。
编辑2:让我尝试解释一下证书验证过程。下面是一个示例证书链的图片;蓝色箭头“是相同的”(例如,Issuer DN是CA的主题DN ),绿色箭头的意思是“生成”(即通过签名,这不是加密,您不应该称之为加密):

服务器在服务器证书消息中显示所有四个证书。然后,客户端使用以下一般证书验证过程验证服务器证书:
如果任何步骤2-6失败,请拒绝证书。这都是使用服务器证书消息中的信息完成的,该消息包含完整的证书链(好的,所以从技术上讲,您可以省略自签名的根CA,TLS客户端将检查其信任根以获得具有适当主题DN的证书,但这是次要的细节)。最后,您知道服务器证书是一个证书链的开始,每个证书都由下一个证书签名,最后一个证书是您天生信任的证书(它是根CA)。没有单独的签名交换;这些签名是证书的一部分。
https://crypto.stackexchange.com/questions/24968
复制相似问题