acl-dev / acl

C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..
https://acl-dev.cn
GNU Lesser General Public License v3.0
2.83k stars 937 forks source link

TLS连接redis返回握手失败 #322

Open yuThomas opened 8 months ago

yuThomas commented 8 months ago

使用这个库连接redis是必须要使用cert/key文件么

  1. 调用代码如下: `acl::acl_cpp_init(); acl::log::stdout_open(true);

    acl::redis_client c("redis:6379"); c.set_password("");

    acl::polarssl_conf::set_libpath("/usr/loca/lib/libpolarssl.so"); auto conf = new acl::mbedtls_conf; c.set_ssl_conf(conf);

    const char *key = "OBD:ALKDJFLAKDJADSK";

    acl::redis conn; conn.set_client(&c);

    auto ret = conn.set(key, "1", 10, SETFLAG_NX | SETFLAG_EX);`

  2. 调用返回错误如下: polarssl_conf.cpp(208), polarssl_dll_load: /usr/local/lib/libpolarssl.so loaded! polarssl_io.cpp(447), handshake: ssl_handshake failed: -0x7200

zhengshuxin commented 8 months ago

是的,而且需要有ca证书,可以参考:https://github.com/acl-dev/acl/issues/155 中讨论的。

yuThomas commented 8 months ago

是的,而且需要有ca证书,可以参考:#155 中讨论的。

好的,感谢

yuThomas commented 8 months ago

是的,而且需要有ca证书,可以参考:#155 中讨论的。

再次请问,是否有提供单向认证功能,即客户端不携带证书。 我尝试使用单向认证(也就是上面的代码),也查看了相关的issue,没有找到类似的信息。但是从源码中samples的redis_ssl示例中,发现并没有对客户端认证文件的强校验,我推测应该是支持此种功能,或是我的理解有问题。谢谢

zhengshuxin commented 8 months ago

是的,而且需要有ca证书,可以参考:#155 中讨论的。

再次请问,是否有提供单向认证功能,即客户端不携带证书。 我尝试使用单向认证(也就是上面的代码),也查看了相关的issue,没有找到类似的信息。但是从源码中samples的redis_ssl示例中,发现并没有对客户端认证文件的强校验,我推测应该是支持此种功能,或是我的理解有问题。谢谢

这个双向验证似乎是redis-server要求的。

yuThomas commented 8 months ago

是的,而且需要有ca证书,可以参考:#155 中讨论的。

再次请问,是否有提供单向认证功能,即客户端不携带证书。 我尝试使用单向认证(也就是上面的代码),也查看了相关的issue,没有找到类似的信息。但是从源码中samples的redis_ssl示例中,发现并没有对客户端认证文件的强校验,我推测应该是支持此种功能,或是我的理解有问题。谢谢

这个双向验证似乎是redis-server要求的。

  1. redis-server我这边配置的是单向认证,同时我尝试以其他语言如GoLang进行单向认证连接测试,可以通过。
  2. 在使用acl::redis_client::set_ssl_conf()这个接口时,我使用的是polarssl,acl::polarssl_conf构造函数中第二个参数为不校验,理解为应该是客户端不校验服务端证书,但是从实际输出看,应该还是做的双向校验