我有SSL客户端和服务器,以及像这样的测试PKI
root_ca -> server_singing_ca -> ssl server
|--> client_signing_ca -> ssl client
在服务器中,我将服务器证书和server_signing_ca证书放在同一个文件中,然后使用
加载文件SSL_CTX_use_certificate_chain_file().
有效。在握手期间,不受信任的中间证书会自动发送给客户端。
我的问题是:我想在握手期间尽量减少数据交换。有没有办法让客户端事先保存server_signing_ca的证书副本,所以我可以从服务器端删除它?
我不想将server_signing_ca的证书添加到受信任的商店
客户端加载server_signing_ca证书的API是什么?我查看了
SSL_CTX_add_extra_chain_cert().
但似乎是客户端加载client_signing_ca的证书以形成证书链。
答案 0 :(得分:1)
请参阅与SSL / TLS协议相关的RFC(其中一个是here)。 通常,服务器应发送证书链,其中可以选择省略根CA.客户应该信任受信任的根并拥有证书。
但是,您可以省略链(除了客户端具有证书链)。您需要确保应验证服务器证书。
您可以使用您拥有的链进行联系后验证,也可以查看SSL_CTX_set_cert_verify_callback。