21.TLS支持

予早 2025-02-21 01:08:23
Categories: Tags:

TLS 基础知识: 证书颁发机构、证书、密钥

TLS 有两个主要目的:加密连接流量和提供验证(验证)对等方的方法,以减少中间人攻击。这两个目的都是通过一套称为公钥基础设施(PKI)的角色、策略和程序来实现的。

公用钥匙基础结构以数字身份的概念为基础,这些数字身份可以通过加密(数学)方式进行验证。这些身份被称为证书,更准确地说,是证书/密钥对。每个支持 TLS 的服务器通常都有自己的证书/密钥对,用于计算特定于连接的密钥,该密钥将用于加密连接上发送的流量。此外,如果被要求,服务器还可以向连接对等方出示自己的证书(公钥)。客户端可能有也可能没有自己的证书。在 RabbitMQ 等消息传递和工具中,客户端通常也会使用证书/密钥对,以便服务器验证其身份。

证书/密钥对由 OpenSSL 等工具生成,并由称为证书颁发机构(CA)的实体签署。CA 签发用户(应用程序或其他 CA)使用的证书。证书由 CA 签发后,就形成了一个信任链。这种链可能包括多个 CA,但最终都会签署应用程序使用的证书/密钥对(叶子或最终用户证书)。CA 证书链通常在一个文件中一起发布。这种文件称为 CA 捆绑文件。

下面是一个最基本的链示例,其中有一个根 CA 和一个叶子(服务器或客户端)证书:

带有中间证书的证书链可能是这样的:

有一些机构负责签署和签发证书/密钥对。它们大多是广受信任的 CA,并收取服务费。

启用了 TLS 的 RabbitMQ 节点必须在一个文件(CA 捆绑包)中拥有一组它认为可信的证书颁发机构证书,即证书(公钥)文件和私钥文件。文件将从本地文件系统读取。RabbitMQ 节点进程的有效用户必须可以读取这些文件。

启用 TLS 的连接的两端都可以选择验证连接的另一端。在此过程中,它们会尝试在对等方提供的证书列表中找到受信任的证书颁发机构。当双方都执行此验证过程时,这就是所谓的mutual TLS authentication或 mTLS。

自签名证书或者受信任CA签发证书皆可。

RabbitMQ提供的证书生成方法

https://www.rabbitmq.com/docs/ssl#automated-certificate-generation

openssl生成证书

https://www.rabbitmq.com/docs/ssl#manual-certificate-generation

测试TLS安全性

https://www.rabbitmq.com/docs/ssl#tls-evaluation-tools

TLS 版本限制在 1.2 及更高版本。TLSv1.0 和 TLSv1.1 已被业界弃用。

使用不支持 TLSv1.3 的旧版运行时(如 JDK、.NET、Python)的客户端将无法连接到配置为仅接受 TLSv1.3 连接的 RabbitMQ 节点。