gpt4 book ai didi

无法验证服务器 SSL 证书

转载 作者:行者123 更新时间:2023-11-30 17:16:18 26 4
gpt4 key购买 nike

我正在尝试使用 openssl 库让客户端通过 https 连接到某些服务器。

调用堆栈是这样的:

SSL_library_init();
SSL_load_error_strings();
SSL_CTX *ctx = SSL_CTX_new(TLSv1_method());
SSL_CTX_load_verify_locations(ctx, "file_with_trusted_certificates", NULL);
SSL *ssl = SSL_new(ctx);
BIO *bio = BIO_new_socket(...);
SSL_set_bio(ssl, bio, bio);

SSL_connect(ssl);

SSL_get_verify_result(ssl);

我有 2 个带有 ssl 证书的服务器,我使用 openssl 工具提取这些证书并将其放入“file_with_trusted_certificates”文件中:

openssl s_client -showcerts -connect server_url:443

问题如下:一台服务器已验证(尽管如果不使用 file_with_trusted_certificates,它会失败,并显示错误 19:证书链中的自签名证书),但第二台服务器的检查始终失败,并显示错误 20:无法获取本地发行人证书。通过时

"-CAfile file_with_trusted_certificates"

对于 openssl 工具,两台服务器都得到验证。

我做错了什么,为什么第二个服务器也没有得到验证?

服务器具有不同的密码,成功的服务器启用了安全重新协商。

编辑:

C 客户端运行在arm 设备上,该设备具有libssl v0.9.8。在嵌入式设备上运行的 openssl 工具产生与 C 应用程序相同的结果:第一个服务器为错误 20,另一个服务器为 OK。使用 Linux 环境,openssl 工具对两台服务器都产生正常结果,但是,也许 C 应用程序的版本也会执行相同的操作。

最佳答案

经过一番尝试,我终于找到了问题所在。

我需要在“file_with_trusted_certificates”文件中的链中添加根证书颁发者的证书,但我只在链中添加了根证书:

Common name: Baltimore CyberTrust Root -> I added this
Issuer: GTE CyberTrust Global Root -> I needed to add the certificate of this

有趣的是,它适用于其他服务器,因为链中的根证书是自签名和授权的:

Common name: AddTrust External CA Root
Issuer: AddTrust External CA Root

关于无法验证服务器 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com