正如我们在使用openssl api创建SSL
连接时所知,我们创建了一个SSL_CTX
上下文对象,其中加载了所有证书和密钥。
要设置对等验证,我们使用SSL_CTX_load_verify_locations
api加载 CA证书(CA存储在文件中)
但是现在在我的情况下,CA不在档案中,我有一个X509 *issuerCert
。
现在如何在issuerCert
对象中设置此SSL_CTX
?
我发现了这个: - C++/OpenSSL: Use root CA from buffer rather than file (SSL_CTX_load_verify_locations)
在上述解决方案中,我们使用X509_STORE *
创建SSL_CTX_get_cert_store
,最后在其中添加X509 *issuerCert
。
现在我很困惑,因为将此证书添加到X509_STORE *
仅将其添加到商店中,该证书信息将如何与SSL_CTX
相关联?
最终我们将SSL_CTX
传递给SSL_connect
,其中所有验证(握手)都在幕后发生。那么CA证书信息如何
使用SSL_connect
而不是SSL_CTX_get_cert_store
时会转到SSL_CTX_load_verify_locations
name[5]="";
?
答案 0 :(得分:2)
在上面的解决方案中,我们正在使用创建X509_STORE * SSL_CTX_get_cert_store,最后在其中添加X509 * issuerCert。
你不是"创造"使用SSL_CTX_get_cert_store
的证书库。您将获得指向SSL存储的指针,该存储是SSL_CTX的一部分。对证书库的任何更新都将反映在SSL_CTX中。请注意,API具有以下语法,它将SSL_CTX作为参数:
X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx);