SSL_CTX_load_verify_locations 的问题

Troubles with SSL_CTX_load_verify_locations

我有 openssl 服务器,我不需要允许所有客户端连接。我为这个 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,const char *CApath); 找到了这个函数。它适用于一个 CA 文件和一个证书,但我需要再添加一个,所以我尝试将证书添加到此文件,如下所示:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE----- 

但是程序只读了第一个而没有读第二个。接下来,我尝试使用 CApath,我将我的 .crt 文件重命名为 hash.0,现在程序不读取它们。我做错了什么?

.crt 格式的证书。

工作正常:SSL_CTX_load_verify_locations(ctx, "keys/c1.crt", NULL);

无效:SSL_CTX_load_verify_locations(ctx, NULL, "keys/hashes");

两行代码returns1.

对于 CApath 参数,我认为您需要使用 OpenSSL 的 rehash(或 c_rehash)实用程序。假设您的证书在 keys/ 目录中,如下所示:

keys/c1.crt
keys/c2.crt

然后你使用openssl rehash生成OpenSSL期望的links/names:

$ openssl rehash keys

准备 keys/ 目录用于 SSL_CTX_load_verify_locations():

SSL_CTX_load_verify_locations(NULL, "keys");

希望对您有所帮助!