- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
来自 here ,我了解到,我们需要一个公钥和用户标识:
目标是在两个节点(客户端和服务器)之间建立 SSL/TLS 连接。
根据上图,我的理解是,将公钥作为输入来创建 CSR,但是步骤 4 使用私钥 (server-key.pem
) 来创建 CSR(server.CSR
)
第1步)创建证书颁发机构 key (私钥)
$ 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
第五步添加配置
$ 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
第六步创建服务器证书
$ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
第七步创建客户端私钥
$ openssl genrsa -out key.pem 4096
第 8 步通过输入用户标识为客户创建 CSR
$ openssl req -subj '/CN=client' -new -key key.pem -out client.csr
Step 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) 删除 key 的写入权限
$ chmod -v 0400 ca-key.pem key.pem server-key.pem
第13步)为每个用户读取证书的权限
$ chmod -v 0444 ca.pem server-cert.pem cert.pem
Step 14) 在服务器端上传,证书颁发机构(ca.pem
),服务器证书(server-cert.pem
) &服务器 key (server-key.pem
)
我对对称和非对称 key 加密有很好的理解。
我们使用非对称 key 来解决双方之间的 key 分配问题(对称 key )
据我所知,每个证书都有公钥+所有者身份(提供证书)
问题:
1) ca-key.pem
, server-key.pem
& key.pem
是对称 key 吗?
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
创建服务器.csr
包含公钥+用户标识?如果是,这个公钥与证书(server-cert.pem
)提供的公钥有何不同?
7) 如果上述过程中没有创建对称 key ,那么客户端和服务器如何加密通信?
8) server-key.pem
/server-cert.pem
/ca.pem
(上传到服务器)如何与 key.pem
/cert.pem
/ca.pem
(在客户端)?
最佳答案
1) Are ca-key.pem, server-key.pem & key.pem symmetric keys?
这些是非对称 key 。创建证书时根本不涉及对称 key 。对称 key 仅涉及 TLS 中的实际加密。
2) Why to create Certificate authority(ca.pem)? Why do we need a private key(ca-key.pem) to create Certificate authority? Because it contradicts with the diagram(above)
CA 是一个信任 anchor 。 CA 的私钥用于颁发(签署)新证书。包含公钥的 CA 证书受到想要验证证书的一方的信任。参见 SSL Certificate framework 101: How does the browser actually verify the validity of a given server certificate?更好地了解 CA 证书与叶证书和签名(使用私钥完成)如何协同工作。
实际上不需要 CA,即可以使用自签名证书。但在这种情况下,喜欢使用证书验证连接的每一方都需要事先了解它应该能够验证的每个自签名证书。这不能很好地扩展,即更容易显式信任 CA,然后从这种信任派生到 CA 颁发的证书中。
3) Why do we need a private key to create CSR? Because it contradicts with the diagram(above)?
CSR 被签名以证明您拥有与 CSR 中的公钥匹配的私钥(因此在未来的证书中)。
4) Why to create Certificate Signing Request(CSR) before creating a certificate? both client & server
通常,CSR 是由与 CA 不同的一方创建的。在这种情况下,CSR 是一个签名的容器,它提供有关该方希望颁发的证书的信息。创建证书在技术上不是必需的,但在组织上是必需的。
5) Why do we need two certificates(server certificate server-cert.pem & client certificate cert.pem)?
我们没有。通常只需要服务器证书来确保客户端与正确的服务器通信。只有相互身份验证才需要客户端证书,其中服务器也喜欢使用证书对客户端进行身份验证。
6) Does server.csr contain a public key + user identification? If yes, how this public key different from the public key provided by certificate?
CSR 中的公钥与证书中的公钥相同。证书中有用户特定信息(域),但 CA 在颁发证书之前必须通过其他方式验证这些信息是否确实正确(即用户拥有域)。
7) If there are no symmetric keys created in the above process, then how client & server communicate with encryption?
TLS 握手包含身份验证部分(根据证书检查服务器是否是预期的服务器)和 key 交换。后者生成用于加密应用程序数据的对称 key 。参见 How does SSL/TLS work?了解详情。
8) How server-key.pem/server-cert.pem/ca.pem(uploaded on server) work with key.pem/cert.pem/ca.pem(on client)?
服务器证书的私钥用于在 TLS 握手中签署一些挑战,以证明服务器拥有给定的证书。如果进行相互身份验证,则以类似的方式使用客户端证书的私钥。 CA 证书用于验证证书(再次参见 SSL Certificate framework 101: How does the browser actually verify the validity of a given server certificate? )。
关于启用 SSL/TLS - openssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54502089/
如果我使用open ssl命令 sudo openssl genrsa -out privkey.pem 2048 要生成rsa key ,它仅生成1个文件。这是私钥。我如何获得公钥。 最佳答案 回答
三个不同版本的 openssl 正在同时更新 openssl.org : 0.98, 1.0.0, 1.0.1?它们之间有什么区别,我该如何选择要使用的版本? 最佳答案 https://en.wiki
我有以下命令用于 OpenSSL 生成私钥和公钥: openssl genrsa –aes-128-cbc –out priv.pem –passout pass:[privateKeyPass] 2
我正在尝试使用对应的 gcc (arm-none-eabi-5_4-2016q2) 为 cortex m3 机器交叉编译 openssl。机器应该有能力做 TCP 请求,我们希望在一天结束时做 HTT
我正在尝试使用 openssl dsa 实现,但我对以下细节感到非常困惑: 命令 openssl dsa .... 的选项“-text”:输出中的十六进制数字,我是否正确地假设这些是字节,因此它们是按
我正在尝试制作一个假 CA 并用它签署一个证书以与 stunnel 一起使用(这似乎只是调用 OpenSSL 例程,因此您可能不需要了解该程序来提供帮助:)。然而,stunnel 一直拒绝我的证书,说
不幸的是,Perl 在尝试安装 OpenSSL 的手册页(例如 OpenSSL_1_0_1g)时不知何故遇到了错误。因为我不需要它们 - 我只想使用 OpenSSL 作为 C 库,我想我可以通过完全跳
OpenSSL 中的 BIO 对到底是什么?它的用途是什么?我已经检查过 OpenSSL 文档,但任何细节都很少。 最佳答案 OpenSSL 中的 BIO 类似于文件句柄。您可以使用一对它们来安全地相
openssl ca 和 openssl x509 命令有什么区别?我正在使用它来创建和签署我的 root-ca、intermed-ca 和客户端证书,但是 openssl ca 命令不会在证书上注册
如何(如果有的话)为 OpenSSL 定义一个单一的可信证书文件在 Windows(Win-7,OpenSSL 1.0.1c)上使用 SSL_CERT_FILE 环境变量? 各种研究促使我下载了 Mo
我有一个自签名证书,其中显示了列出的基本约束,但从中生成的签名请求不显示这些属性,例如 [v3_req]。我怎样才能让它可见?我正在使用 openssl 生成证书。 场景: 我使用以下方法创建自签名证
这个问题在这里已经有了答案: Check if a connection is TLSv1 vs SSLv3 (SSL_CIPHER_description/SSL_CIPHER_get_name)
是否有更简单的方法来确定在构建 openssl 期间指定的选项,例如当时是否定义了 OPENSSL_NO_SRTP? 我只能从以下方面获得有限的信息: openssl 版本 -a 命令。但是,如果我只
我们正在与 AWS Nitro 合作,仅提供 3 小时的证书。 我们正在寻找一种可以跳过验证中的过期部分并仍然确认证书链有效的方法。 最佳答案 根据 openssl-verify 文档
嗨,我如何在 Easyphp 中启用 openssl,因为我收到错误消息无法发送。Mailer 错误:缺少扩展:opensslTime:使用 phpmailer 时。谢谢 最佳答案 在您的 php.i
我正在尝试以编程方式读取 OpenSSL 警报消息,但无法找到执行此操作的方法。 OpenSSL API 提供如下功能: const char *SSL_alert_type_string(int v
我跑了openssl speed在我的 Ubuntu 计算机上。一些结果: Doing md4 for 3s on 16 size blocks: 9063888 md4's in 3.00s Doi
我编译了带有cryptodev支持(即硬件加速)的OpenSSL,但不幸的是默认引擎仍然是软件。 time openssl speed -evp aes-128-cbc -engine cryptod
我需要从 RedHat Linux 服务器连接到 Microsoft Dynamics CRM 服务器。地址是xxx.api.crm4.dynamics.com。服务器接受 TLSv1 但不接受 1.
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 上个月关闭。 Improve thi
我是一名优秀的程序员,十分优秀!