Openssl 如何将其他不受信任的证书加载到SSL_CTX中

Openssl 如何将其他不受信任的证书加载到SSL_CTX中,openssl,x509,pki,Openssl,X509,Pki,我有SSL客户端和服务器,还有这样一个正在测试的PKI root_ca -> server_singing_ca -> ssl server |--> client_signing_ca -> ssl client 在服务器中,我将服务器证书和服务器签名ca证书放在同一个文件中,并使用 SSL_CTX_use_certificate_chain_file(). 这很有效。在握手过程中,不受信任的中间证书会自动发送给客户端 我的问题是:我想尽量减少握手过程

我有SSL客户端和服务器,还有这样一个正在测试的PKI

root_ca -> server_singing_ca -> ssl server
      |--> client_signing_ca -> ssl client
在服务器中,我将服务器证书和服务器签名ca证书放在同一个文件中,并使用

SSL_CTX_use_certificate_chain_file(). 
这很有效。在握手过程中,不受信任的中间证书会自动发送给客户端

我的问题是:我想尽量减少握手过程中的数据交换。有没有办法让客户端事先保存服务器\u签名\u ca证书的副本,以便我可以将其从服务器端删除?
我不想将服务器\u签名\u ca的证书添加到受信任的存储。
客户端加载服务器\u签名\u ca证书的API是什么?我调查了

SSL_CTX_add_extra_chain_cert().

但似乎是由客户端加载客户端的ca证书以形成证书链

请参考与SSL/TLS协议相关的RFC(其中一个是)。 通常,服务器应该发送证书链,根CA可以选择省略。客户端应该信任受信任的根并拥有证书

但是,您可以省略该链(客户端具有证书链除外)。您需要确保应该验证服务器证书


您可以使用您拥有的链进行连接后验证,也可以检查SSL\u CTX\u set\u cert\u verify\u callback。

谢谢您的回答。还有一个问题:我已将服务器\u signing\u ca的证书添加到客户端可信存储中。服务器端根本没有服务器ca的证书。它起作用了。但我想知道这是标准允许的吗?这是最好的做法吗?我记得“只有自签名证书才能在可信证书存储中”@JohnCrane:根据标准,链中只能省略最顶端的根CA。我不确定最佳实践。您是对的,根级别受信任CA(如Verisign)的受信任自签名证书位于受信任证书存储中。但是,用户可以自行选择添加其他证书。唯一需要做的是,客户机必须能够验证服务器的身份,而不会引发任何异常。