【发布时间】:2018-10-12 13:17:11
【问题描述】:
我正在尝试了解用于配置 TLS 的参数(专门针对 rabbitmq,但我的问题可能更笼统)。
有 4 个主要实体需要考虑:
密钥 - 对等方用来解密发送给它的已使用其公钥加密的消息的私钥。
Cert - 包含对等方公钥的证书 它还包含一些识别细节,如主机名、组织等。其中许多是可选的。 证书可以是未签名的(如果有的话很少?)、自签名或由证书颁发机构签名。
CACert - 对等方信任的 CA 证书,可用于解密和验证已签名证书的签名。
CA-key - 用于签署证书的 CA 的私钥。
这些映射到配置设置,包括:
enablePeerVerification - 如果为 true,则对等方尝试通过检查证书是否真的由 CA 签名来验证服务器是否是它所说的那个人(同样在信任链上向上直到它到达它信任的 CA,因为它在其本地 CA 信任库中有一个证书)。 将此设置为 false 是一个坏主意,因为有人可能会冒充对等方。 (在 go 这个选项被称为 InsecureSkipVerify 作为警告) 如果证书是自签名的,则无法进行对等验证。 此选项允许您改用对等方的自签名证书 风险自负(例如在开发过程中)。
Key - 用于解密的私钥
证书 - 用于加密(和握手)
CACert - 签署“Cert”证书的 CA 的证书
为什么有 CACert 的配置设置?
如果证书由 CA 签名,则它已经包含足够的信息来定位 CA(例如域名)。 CACert 的用途是什么,是否或何时在 TLS 协商期间发送? 这是否只是为了节省直接前往 CA 的便利? 如果 CACert 不匹配或指向您的信任库中的一个,您仍然需要这样做。
我指的是服务器的 rabbitmq.config 中的“cacert”和 C API (rabbitmq-c) 中的 amqp_ssl_socket_set_cacert() 中的设置。
我想检查一下我的理解是否正确 (https://xkcd.com/386/)
【问题讨论】:
-
这可能是 security.stackexchange.com/questions/93157/… 的副本。服务器将链中的所有证书作为证书消息发送。如果是这种情况,配置设置不应该是包含它们的本地信任存储的位置而不是单个证书吗?
-
我认为答案可能是 CACert 不是单个证书,而是提供整个链的证书包 (support.comodo.com/index.php?/Knowledgebase/Article/View/1145/1/…)(以根优先顺序连接)。有人可以确认吗?
标签: ssl rabbitmq ssl-certificate rabbitmq-c