openssl SSL_Connect with err 2

时间:2010-09-14 15:06:00

标签: openssl

我是这个论坛的新成员。

问题:

我必须在我的project.project中使用gsoap实现openssl。

在“r = SSL_connect(soap-> ssl))中< = 0)” SSL_connect调用无法建立与服务器的连接。服务器和客户端都在本地主机

我看到服务器已准备好接受连接,我在下面看到与netstat命令建立的连接:

TCP cspxppgudepu:15000 cspxppgudepu.com:0聆听 TCP cspxppgudepu:15000 localhost:2864 ESTABLISHED

15000以上的端口用于服务器。

以下是客户端连接:  TCP cspxppgudepu:16000 cspxppgudepu.com:0 LISTENING

但是SSL_connect无法连接。它总是失败,返回码为-1&错误2.

通过SSL连接,简单的TCP连接,两端都能够连接和通信。低于没有SSL的网络配置设置                                       

我使用openssl的网络配置设置:

    <NetworkConfig> 
            <Server Location="https://127.0.0.1:15000" /> 
            <Client Location="https://127.0.0.1:16000" /> 

我接受了客户和客户服务器身份验证为false。

提前致谢。 普拉迪普雷迪。


更新,

SSL_connect因SSL_ERROR_WANT_READ而失败。我明白客户端正在服务器上等待写一些数据。但我不明白在服务器端更改代码的内容。

请让我知道,如何离开这个。


如果我在服务器和客户端都提供根证书cacert.pem并且身份验证设置为true,那么SSL通信工作正常。而不是给出相同的根证书cacert.pem我已经给了clientcert.pem和servercert.pem soap_ssl_client_context()和soap_ssl_server_context()分别调用。 这次握手失败,客户端出现以下错误:“错误:14090086:lib(20):func(144):reason(134)” 和服务器端“错误:14094418:lib(20):func(148):reason(1048)”

但客户端证书和服务器证书都是从命令下面的根证书“cacert.pem”生成的。

命令:openssl x509 -req -in clientreq.pem -sha1 -extensions usr_cert -CA root.pem -CAkey root.pem -CAcreateserial -out clientcert.pem -days 1095 和 命令:openssl x509 -req -in serverreq.pem -sha1 -extensions usr_cert -CA root.pem -CAkey root.pem -CAcreateserial -out servercert.pem -days 1095 错误我理解为“错误:14094418:SSL例程:SSL3_READ_BYTES:tlsv1 alert unknown ca”。 但是这两个证书都来自同一个根CA cacertpem。如果您有任何修复,请提供。 我无法编辑帖子,所以发布答案。 谢谢, 普拉迪普。

2 个答案:

答案 0 :(得分:0)

首先,您必须在致电SSL_connect()之前建立TCP连接。 SSL_connect()只是设置SSL会话,并且它期望您使用SSL_set_fd()设置的文件描述符已经连接到另一端。

其次,您必须在服务器端调用SSL_accept()(再次,在已经设置了基础TCP连接之后)。

答案 1 :(得分:0)

您是否通过以下方式设置CA在您的客户端代码上受信任:

SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath)

您可以在OpenSSL文档中找到有关如何使用该方法的文档 - 它非常简单:

http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html