【发布时间】: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(在客户端)工作?
【问题讨论】:
-
这在Information Security 上会更合适。
标签: ssl https openssl certificate ssl-certificate