如果我在 OpenSSL 中加载新证书,证书是不是会更改 SSL 连接/状态“点”?

Posted

技术标签:

【中文标题】如果我在 OpenSSL 中加载新证书,证书是不是会更改 SSL 连接/状态“点”?【英文标题】:Does the certificate a SSL connection/state "points" to change if I load a new certificate in OpenSSL?如果我在 OpenSSL 中加载新证书,证书是否会更改 SSL 连接/状态“点”? 【发布时间】:2011-09-03 14:46:06 【问题描述】:

我正在构建一个应用程序,使用户能够连接到同一台服务器。重要的是确保每个用户都有自己的证书/私钥用于加密,而不是应用程序/设备使用自己的证书/私钥。

现在我知道,从 OpenSSL 网站文档中,他们的 OpenSSL 内部证书存储可以为 RSA 密码保存一个证书/密钥对。我的问题是这样的:

假设我有一个名为 ssl1 的 SSL 结构,它是从我的 SSL_CTX 创建的,我没有设置要在 SSL_CTX 中使用的证书/密钥(因此不继承证书/密钥)。然后我继续为与某个用户关联的 ssl1 设置证书/密钥。然后假设我从同一个 SSL_CTX 创建了另一个名为 ssl2 的 SSL 结构。然后,我继续为与第一个用户不同的用户关联的 ssl2 设置证书/密钥。

如果此时我在 ssl1 上调用 SSL_connect() API,它会使用我为 ssl2 设置的证书/密钥吗?我问,因为商店说它只保存一个证书/密钥对,我最后为 ssl2 加载了证书/密钥,因此我认为它会覆盖我首先为 ssl1 加载的证书/密钥强>。

感谢您阅读我的帖子。感谢您提供的任何帮助/智慧/指点。

【问题讨论】:

【参考方案1】:

首先,我对您要求的实施细节感到困惑。其次,除非您尝试通过用户的证书对用户进行身份验证,否则我想不出不同的密钥会有用的情况——您显然没有这样做(用户需要不同的加密,而不是身份验证。

我相信您真正想做的是使用为Perfect Forward Secrecy 提供的设置建立连接。为此,您要使用名称以 TLS_DHE_ 开头的 TLS 密码。那些使用 Diffie-Helman 密钥交换,从而使服务器密钥的作用基本上是服务器对用户的身份验证之一。

【讨论】:

【参考方案2】:

据我了解,SSL_CTX 充当 SSL 对象的模板。因此,当您创建新的 SSL 对象时,它会继承创建它的 SSL_CTX 的属性/属性。这个明确提到here

所以对于您的问题,ssl1ssl2 对象都将使用自己的证书/密钥。

【讨论】:

以上是关于如果我在 OpenSSL 中加载新证书,证书是不是会更改 SSL 连接/状态“点”?的主要内容,如果未能解决你的问题,请参考以下文章

openssl生成证书 - CSDN博客

如何使用包括 CRL 分发点的 openssl 创建证书?

使用 openssl 从自签名证书生成的证书签名请求是不是应该显示扩展属性?

OpenSSL C API:使用CRL进行证书链验证

Openssl生成证书流程

怎么在windows上openssl颁发代码签名证书?