我是这个论坛的新成员。
问题:
我必须在我的project.project中使用gsoap实现openssl。
我看到服务器已准备好接受连接,我在下面看到与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。如果您有任何修复,请提供。 我无法编辑帖子,所以发布答案。 谢谢, 普拉迪普。
答案 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