gpt4 book ai didi

c - OpenSSL、公钥和私钥

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:31 25 4
gpt4 key购买 nike

我最近一直在用 C 语言试验 OpenSSL API,我对一些设置函数以及公钥密码学中的某些概念感到困惑。

我大致了解公钥加密的工作原理。您有一个每个人都可以使用的公钥,然后服务器和客户端都有一个私钥,这是 secret 的,并且是解密消息所必需的。

但是,我对您何时真正需要公钥感到有点困惑。例如,Web 浏览器是否需要公钥?我不这么认为,因为在大多数用例中,似乎只有服务器(不是客户端)需要公钥。如果服务器端和客户端都有公钥,使用哪个?

让我更加困惑的是,OpenSSL API 定义了一个函数 SSL_CTX_use_PrivateKey_file(),但没有相应的 SSL_CTX_use_PublicKey_file()。在我的实验中,我编写了一个连接到 https 网站并下载文件的简单 Web 客户端。它工作正常,不需要公钥。我只是使用 OpenSSL 命令行工具创建了一个私钥,然后在我的程序中调用了 SSL_CTX_use_PrivateKey_file()

但是,如果我正在编写一个服务器,而不是客户端,我不需要公钥吗?如果是这样,为什么我在 OpenSSL API 中看不到类似 use_PublicKey_file 的内容?

最佳答案

在 TLS/SSL 连接中,公钥作为证书的一部分提供,用于验证一方 - 证书将身份与特定公钥联系起来。服务器端始终提供证书(公钥),因为服务器端必须始终向客户端证明其身份。

客户端也可以提供证书,如果它想证明自己的身份(并且它有合适的证书) - 在您的网络浏览器示例中,通常未提供客户端证书,但有可能。一些网站确实使用客户端证书进行身份验证。

如果使用公钥,则也必须使用相应的私钥 - key 成对出现。提供公钥的相应函数是 SSL_CTX_use_certificate() - 公钥是证书的一部分。只提供其中一个是没有意义的 - 在您的客户端示例中,您可以完全省略对 SSL_CTX_use_PrivateKey_file() 的调用。

关于c - OpenSSL、公钥和私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5382448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com