0

我有 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的证书以形成证书链。

4

1 回答 1

1

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

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

您可以使用您拥有的链或检查 SSL_CTX_set_cert_verify_callback 进行连接后验证。

于 2013-04-14T15:06:56.673 回答