ssl - ACE SSL 错误 : peer did not return a certificate

标签 ssl openssl ace mutual-authentication

我正在为应用程序制作服务器和客户端,使用带有 OpenSSL 的 ACE 库。我正在尝试让相互身份验证工作,o 服务器将只接受来自受信任客户端的连接。

我已经生成了一个 CA key 和证书,并用它来签署服务器证书和客户端证书(每个证书也都有自己的 key )。我似乎正确地加载了受信任的商店,但在握手期间我不断收到错误“对等方未返回证书”。

服务端代码:

ACE_SSL_Context *context = ACE_SSL_Context::instance();

context->set_mode(ACE_SSL_Context::SSLv23_server);
context->certificate("../ACE-server/server_cert.pem", SSL_FILETYPE_PEM);
context->private_key("../ACE-server/server_key.pem", SSL_FILETYPE_PEM);

if (context->load_trusted_ca("../ACE-server/trusted.pem", 0, false) == -1) {
    ACE_ERROR_RETURN((LM_ERROR, "%p\n", "load_trusted_ca"), -1);
}

if (context->have_trusted_ca() <= 0) {
    ACE_ERROR_RETURN((LM_ERROR, "%p\n", "have_trusted_ca"), -1);
}

客户端代码:

ACE_SSL_Context *context = ACE_SSL_Context::instance();
context->set_mode(ACE_SSL_Context::SSLv23_client);
context->certificate("../ACE-client/client_cert.pem", SSL_FILETYPE_PEM);
context->private_key("../ACE-client/client_key.pem", SSL_FILETYPE_PEM);

我按照以下说明生成了证书:https://blog.codeship.com/how-to-set-up-mutual-tls-authentication/

并且上网查了一下,如果.crt和.key文件是可读的,应该已经是.pem格式了,不用再转换了。所以我只是更改了扩展名并在这里使用它们。

感谢任何帮助!

最佳答案

我的问题显然与这里看到的相同:OpenSSL client not sending client certificate

我在创建 SSL 套接字后更改了 SSL 上下文。现在相互身份验证有效,但我的客户端在关闭连接时崩溃了。虽然我还不知道为什么会这样。

关于ssl - ACE SSL 错误 : peer did not return a certificate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46247485/

相关文章:

c - ssl服务器程序中的非法指令

c - 编译某些函数所需的库

c++ - 线程被 ACE_SOCK_Stream 的函数 send() 或 recv() 暂停?

ssl - CloudFront 和 EC2 Origin 之间的 SSL 证书使用什么 Origin 和 ServerName?

http - Netty - 通过 ssl 发送 http 请求

ssl - symmetricDS 双向 ssl 握手(clientAuth=false)

c++ - 如何稳定地将 char* 转换为 TAO::String_Manager_T<char>

Github - TLS 证书验证已被禁用!在 Windows 上

c - 使用 OpenSSL API 实现 Windows CryptoAPI CryptDeriveKey

c++ - libACE 和 clang/clang++,对 `ACE_Atomic_Op<ACE_Thread_Mutex, long> 的 undefined reference