首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSL证书和密码套件通信

SSL证书和密码套件通信
EN

Security用户
提问于 2015-05-29 18:22:20
回答 1查看 43.9K关注 0票数 29

我一直在学习SSL/TLS协议(从https://www.rfc-editor.org/rfc/rfc5246),并有一些关于该协议的概念性问题。

  1. 客户机和服务器交换"hello“消息,在此期间,他们选择SSL/TLS版本和密码套件。更具体地说,客户端建议一个密码套件列表,而服务器选择一个(如果服务器不选择任何东西,握手就会失败)。现在,服务器是否选择了与证书中使用的密码套件相对应的密码套件?

对于示例:运行openssl x509 -in <server_cert>.pem -text -noout将向您提供有关服务器证书的信息。在一个示例证书上,我看到公钥算法是rsaEncryption (2048位),签名算法是sha256WithRSAEncryption。这不是已经预先确定了在握手中使用的密码套件的一部分吗?

  1. 让我们假设服务器和客户端在密码套件上达成一致。现在,我还看到客户端也可以在握手之后提交证书。这是否意味着客户端证书上的密码必须与所选的密码套件兼容?

(类似的问题,但没有回答我想要的:为HTTPS挑选密码套件)

EN

回答 1

Security用户

发布于 2015-05-29 18:41:41

对于服务器证书:密码套件指示密钥交换的类型,这取决于服务器证书密钥类型。你基本上有以下几点:

  • 对于TLS_RSA_*密码套件,密钥交换使用客户端选择的随机值与服务器的RSA公钥进行加密,因此服务器的公钥必须是RSA类型,并且必须适合加密(服务器的证书不能包括一个Key Usage扩展,上面写着“只签名”)。
  • 对于TLS_DHE_RSA_*密码套件,密钥交换使用一个短暂的Diffie-Hellman,服务器用它的RSA签署它在DH密钥交换中的部分。因此,服务器的公钥必须是RSA类型的,并且必须适合签名(同样,证书不能将密钥使用限制在仅加密的范围内)。
  • TLS_DHE_DSS_*和TLS_DHE_ECDSA_*密码套件使用短暂的Diffie-Hellman密钥交换,服务器的密钥必须分别为DSA和EC类型,并且必须适合签名。
  • TLS_ECDHE_*密码套件与TLS_DHE_*密码套件相似,只是Diffie-Hellman密钥交换是一个椭圆曲线变体。服务器证书上的条件保持不变。
  • TLS_DH_*和TLS_ECDH_*密码套件是不同的(请注意在“DH”之后缺少“E”)。对于这些套件,服务器的证书直接包含Diffie-Hellman公钥(或其椭圆曲线变体),密码套件然后限定颁发CA用于签署证书的算法。例如,TLS_DH_RSA_*的意思是“服务器将一个DH公钥存储在由某个CA与RSA签署的证书中”。这是证书上的签名类型与密码套件有任何关系的唯一情况。由于在实践中没有人使用这种证书,这种情况可以忽略。

对于客户端证书:客户端在服务器请求时显示证书。客户端证书类型与密码套件没有任何关系(除了非常罕见的静态DH证书的情况外,我从未见过在实践中使用这种证书)。客户端证书必须适合签名。作为请求客户端证书的握手消息的一部分,服务器发送一些有关支持的算法的信息(请参阅标准)。实际上,TLS 1.2通过提供支持的算法和哈希函数组合的灵活列表,进一步扩展了该机制。

票数 26
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/90422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档