【问题标题】:SSL/TLS enabling - opensslSSL/TLS 启用 - openssl
【发布时间】:2019-06-27 08:44:22
【问题描述】:

从here,我了解到,我们需要一个公钥和用户标识:

创建企业社会责任


目标是在两个节点(客户端和服务器)之间建立 SSL/TLS 连接。

根据上图,我的理解是,将公钥作为输入来创建 CSR,但 步骤 4 使用私钥(server-key.pem)创建 CSR(server.CSR)


第 1 步) 创建证书颁发机构密钥(私钥)

$ openssl genrsa -aes256 -out ca-key.pem 4096

第 2 步) 使用输入(ca-key.pem)创建证书颁发机构(根证书)

$ openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

第 3 步)为网络服务器创建私钥

$ openssl genrsa -out server-key.pem 4096

步骤 4) 通过输入用户标识创建证书签名请求 (CSR)。这将依次创建公钥。

$ openssl req -subj "/CN=dockerbuild.harebrained-apps.com" -sha256 -new -key server-key.pem -out server.csr

第 5 步)添加配置

$ echo subjectAltName = IP:40.xx.xx.164,IP:10.0.0.4,IP:127.0.0.1,DNS:dockerbuildsys.westus.cloudapp.azure.com,DNS:dockerbuild.harebrained-apps.com > extfile.cnf

第 6 步)创建服务器证书

$ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

步骤 7) 创建客户端私钥

$ openssl genrsa -out key.pem 4096

步骤 8) 通过输入用户标识为客户创建 CSR

$ openssl req -subj '/CN=client' -new -key key.pem -out client.csr

第 9 步) 客户端证书扩展文件

$ echo extendedKeyUsage = clientAuth > extfile.cnf

步骤 10) 创建客户端证书

$ openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf

步骤 11) 删除签名请求

$ rm -v client.csr server.csr

第 12 步)删除密钥的写权限

$ chmod -v 0400 ca-key.pem key.pem server-key.pem

第 13 步)为每个用户读取证书的权限

$ chmod -v 0444 ca.pem server-cert.pem cert.pem

第 14 步) 在服务器端上传,证书颁发机构(ca.pem),服务器证书(server-cert.pem)和服务器密钥(server-key.pem)


我非常了解对称和非对称密钥加密。

我们使用非对称密钥来解决双方之间的密钥分配问题(对称密钥)

我了解,每个证书都有公钥 + 所有者身份(提供证书)


问题:

1) ca-key.pem、server-key.pem 和 key.pem 是对称密钥吗?

2) 为什么要创建证书颁发机构(ca.pem)?为什么我们需要一个私钥(ca-key.pem)来创建证书颁发机构?

3) 为什么我们需要私钥来创建 CSR?因为和上图矛盾?

4) 为什么要在创建证书之前创建证书签名请求(CSR)?客户端和服务器

5) 为什么我们需要两个证书(服务器证书server-cert.pem & 客户端证书cert.pem)?

6) openssl req -subj "/CN=dockerbuild.harebrained-apps.com" -sha256 -new -key server-key.pem -out server.csr 是否创建包含公钥 + 用户标识的 server.csr?如果是,这个公钥与证书提供的公钥(server-cert.pem)有何不同?

7) 如果上述过程中没有创建对称密钥,那么客户端和服务器如何进行加密通信?

8) server-key.pem/server-cert.pem/ca.pem(上传到服务器)如​​何与key.pem/cert.pem/ca.pem(在客户端)工作?

【问题讨论】:

标签: ssl https openssl certificate ssl-certificate


【解决方案1】:

1) ca-key.pem、server-key.pem 和 key.pem 是对称密钥吗?

这些是非对称密钥。创建证书时根本不涉及对称密钥。对称密钥仅用于 TLS 中的实际加密。

2) 为什么要创建证书颁发机构(ca.pem)?为什么我们需要私钥(ca-key.pem)来创建证书颁发机构?因为它与图表相矛盾(上)

CA 是信任锚。 CA 的私钥用于颁发(签署)新证书。包含公钥的 CA 证书被喜欢验证证书的一方信任。请参阅SSL Certificate framework 101: How does the browser actually verify the validity of a given server certificate? 以更好地了解 CA 证书、叶证书和签名(使用私钥完成)如何协同工作。

实际上没有必要拥有 CA,即可以使用自签名证书。但在这种情况下,希望使用证书验证连接的每一方都需要事先了解它应该能够验证的每个自签名证书。这不能很好地扩展,即更容易显式信任 CA,然后从该信任派生到 CA 颁发的证书中。

3) 为什么我们需要私钥来创建 CSR?因为和上图矛盾?

签署 CSR 以证明您拥有与 CSR 中的公钥匹配的私钥(因此在未来的证书中)。

4) 为什么要在创建证书之前创建证书签名请求(CSR)?客户端和服务器

通常,CSR 是由与 CA 不同的一方创建的。在这种情况下,CSR 是一个签名容器,它提供有关该方希望颁发的证书的信息。创建证书在技术上不是必需的,但在组织上是必需的。

5) 为什么我们需要两个证书(服务器证书 server-cert.pem & 客户端证书 cert.pem)?

我们没有。通常只需要服务器证书来确保客户端与正确的服务器通信。只有在服务器也喜欢使用证书对客户端进行身份验证的情况下,相互身份验证才需要客户端证书。

6) server.csr 是否包含公钥+用户标识?如果是,这个公钥与证书提供的公钥有何不同?

CSR 中的公钥与证书中的相同。证书(域)中有用户特定信息,但 CA 在颁发证书之前必须通过其他方式验证这些信息实际上是正确的(即用户拥有域)。

7) 如果上述过程中没有创建对称密钥,那么客户端和服务器如何进行加密通信?

TLS 握手包含身份验证部分(根据证书检查服务器是否是预期的)和密钥交换。后者生成用于加密应用程序数据的对称密钥。详情请见How does SSL/TLS work?。

8) server-key.pem/server-cert.pem/ca.pem(在服务器上上传)如何与 key.pem/cert.pem/ca.pem(在客户端)一起工作?

服务器证书的私钥用于在 TLS 握手中签署一些挑战,以证明服务器拥有给定的证书。如果进行了相互身份验证,则以类似的方式使用客户端证书的私钥。 CA 证书用于验证证书(再次参见SSL Certificate framework 101: How does the browser actually verify the validity of a given server certificate?)。

【讨论】:

  • @overexchange:请不要让您的问题成为移动目标。在这个已经非常广泛且大多离题的问题中,将不再回答任何子问题。
  • 你想让我把这个问题迁移到inf-sec吗?不确定..我该怎么做?
  • @overexchange:实际上,您在这里的许多问题已经在Information Security 上得到解答,因此此类问题很可能会因为过于宽泛而被关闭(子问题太多)或现有的副本。我建议首先检查那里的现有问题(其中一些我在这里引用过),然后只询问尚未涵盖的部分,理想情况下不在一个广泛的问题中。版主可能会将此问题移至Information Security,但其他问题请直接在那里提问。
猜你喜欢
  • 2016-05-16
  • 2017-10-22
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
相关资源
最近更新 更多