ACE SSL错误:对等方未返回证书

时间:2017-09-15 21:07:19

标签: ssl openssl ace mutual-authentication

我使用带有OpenSSL的ACE库为应用程序创建服务器和客户端。我试图让相互身份验证工作,服务器只接受来自可信客户端的连接。

我已经生成了一个CA密钥和证书,并用它来签署服务器证书和客户端证书(每个证书都有自己的密钥)。我似乎正在正确加载受信任的商店,但我一直收到错误"同行没有返回证书"在握手期间。

服务器端代码:

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格式,并且不需要转换它们。所以我只是更改了扩展并在这里使用它们。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我的问题显然与此处所见的相同:OpenSSL client not sending client certificate

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