你好,我想有人向我解释SSL是如何工作的,最重要的是向我解释所有这些文件扩展名是什么以及它们的目的是什么示例我正在尝试连接到kafka,我有一个srip,它为我的kafka在mu kubernetes集群中提取了机密,我得到了多个文件,不知道tey的用途: 所以如果有人可以解释我什么是 .trustore .keystore .pem .p12 .key .crt .ca.crt ...谢谢,我知道它可能很模糊,但我是使用 ssl 和 kafka 的新手,所以如果有人对此有一些基本的解释,那真的会对我有所帮助。
谢谢你的帮助
这是一个非常复杂的话题,你应该使用谷歌。我会尝试在这里回答,但如果你不理解SSL,PKI和非对称加密概念,你可能会迷失在我的解释中。您可以在Youtube上找到视频,并在互联网上找到大量教程和解释。
每个 SSL 证书由两部分组成:
- SSL证书本身 - 这是一个公共部分,它包含公用名,有关证书及其所有者的其他一些重要信息。最重要的部分可能是公钥和CA签名
- 私钥 - 这本质上是密码 - 它是一个私人部分,您永远不能与任何人共享它
私钥和公钥在数学上相互绑定。使用一个密钥加密的内容可以使用另一个密钥解密。拥有私钥的人可以轻松地从中获取公钥,但它不能以另一种方式工作。这就是非对称加密的原则。
证书和密钥只是两个文件。扩展并不重要。但为了方便起见.key
私钥使用后缀。对于证书,我们通常使用.crt
、.pem
或.der
。
重要的是证书和私钥的编码方式。它可以是 PEM 编码或 DER 编码:
- PEM:这是人类可读的格式。您可以告诉 PEM 编码的证书,因为第一行包含
-----BEGIN CERTIFICATE-----
行。 - DER:这是二进制格式。如果你在编辑器中打开这个文件,它将是一堆不可读的废话,因为它只是一堆 0 和 1
现在,您可以看到后缀.der
和.pem
的来源。.crt
后缀只是用作.pem
后缀的替代项。这样每个人都可以说"这很可能是证书"。
每个证书的重要部分是它必须由某人签名。某人是证书颁发机构。证书颁发机构只是另一个公钥/私钥对。它由一些高度信任的组织拥有。证书颁发机构可以使用其私钥对证书进行签名。他们的私钥超级安全。你可以得到的是公钥,这就是ca.crt
、ca.pem
或ca.der
包含的内容。重要的部分是您可以使用CA公钥来验证其私钥完成的签名。签名是证书的一部分。
互联网上有公开信任的证书颁发机构,每个 Web 浏览器都信任它们。这些是经过审核且通常信任的组织。
您可以自行创建证书颁发机构证书和私钥。问题是当您使用它来签署证书时,没有人会信任它。这就是为什么您必须获取ca.crt
文件并提供它的原因。连同您的服务器证书whatever.crt
您还必须发送ca.crt
并告诉试图验证它的人"嘿!这是我用来签署该证书的 CA,请信任它。这取决于他们是否信任它:)
现在.p12
扩展。这是证书的另一种形式。PKCS#12 是一个证书"容器"或"存档"。你可以把你的私钥文件(.key
)你的证书文件(.crt
,.pem
或.der
文件)并将它们"放"到一个文件中。你可以把它想象成ZIP存档,但显然它不是ZIP文件。您也可以使用密码保护它。您可以使用openssl
实用程序来创建 pkcs#12 容器。
truststore
和keystore
是Java概念。我个人讨厌它们,因为它们只是使事情过于复杂,并没有增加任何价值。大多数Java应用程序都可以处理pem/crt/key/p12/der文件。卡夫卡最近也包括支持,但我想说它有点半生不熟。
truststore
也是包含"要信任的证书"的"存档"或"容器"。换句话说,它包含证书颁发机构文件(一个或多个)。所以ca.crt
文件就在那里(不是它的私钥!只是ca.crt
)。它可以包含多个证书。当 Java 应用程序启动时,它将读取该文件,并信任由文件内的证书颁发机构签名的任何证书(例如,当您从该 Java 连接到某些受 SSL 保护的网页或服务器时)。信任库通常受密码保护。
keystore
也是"存档"或"容器"。从归档.p12
创建密钥库。因此,密钥库包含与文件相同的内容.p12
。证书 + 其私钥。密钥库通常受密码保护。
keystore
和truststore
是使用 Javakeytool
实用程序创建的。如前所述.p12
您需要文件来创建它们,因此通常的过程是:
- 我将使用
openssl
生成私钥 - 我将使用
openssl
生成 CSR(.csr
后缀)或证书签名请求文件 - 此文件是未签名的证书 - 我会
.csr
文件发送给证书颁发机构,他们将对其进行签名并提供.crt
或.pem
或.der
文件(甚至所有文件,以便我选择)。他们还会向您发送ca.crt
文件。 - 我将使用
openssl
将.crt
和.key
文件放入存档.p12
- 我将使用
keytool
将.p12
存档放入keystore
存档。 - 我将使用
keytool
将ca.crt
文件放入存档truststore
大多数支持SSL的应用程序(我不确定是否是Kafka,但例如Elasticsearch)都有一些内置工具,可以帮助您设置自己的证书颁发机构和用于开发/测试目的的证书。它们不是用于生产,但我认为很多人都是这样使用的。