emq前面有nginx(或者f5)做负载,服务端证书和私钥配置在nginx里(或者f5),然后客户端的ca证书配置在emq的certs路径下,这样设备能连进来吗?测试的时候报错:
Hostname/IP does not match certificate’s altnames:
这个应该是证书里面的 CN 跟你客户端连接的时候用的 Hostname 不一样。如果这个 CN 是个 hostname 或者域名,那么你连接服务器就必须用该域名。
另外客户端可以设置不校验服务端证书,该选项可能叫做 “verify",”verify_peer",“secure” 或者“安全模式” 等,设置为 false 将跳过对服务端证书的合法性检查。
我关掉了客户端认证服务端,但是emq后端报这个错误 这个是什么原因呢:
2023-10-07 11:09:52.859 [error] supervisor: ‘esockd_connection_sup - <0.1707.0>’
errorContext: connection_shutdown
reason: {ssl_error,
{tls_alert,
{unexpected_message,
“TLS server: In state hello at tls_record.erl:477 generated SERVER ALERT: Fatal - Unexpected Message\n”}}}
offender: [{pid,<0.2783.0>},
{name,connection},
{mfargs,
{emqx_connection,start_link,
[[{deflate_options,},
{max_conn_rate,500},
{active_n,100},
{zone,external}]]}}]
这个是 TLS 握手的问题。
我理解你在 emqx 前面部署了负载均衡,就应该使用负载均衡终结掉 TLS,让均衡器连接 emqx 的 1883 端口才对。
是的 但是我想在负载均衡上做客户端对服务端的认证 然后在emq里面做服务端对客户端的认证,因为客户端的ca证书是动态可配的 放在负载均衡不合适。
我前期配置的时候具体报错是这个,其中172.30.125.52是负载均衡ip 172.30.125.50是emq的ip’:
Hostname/IP does not match certificate’s altnames: IP: 172.30.125.52 is not in the cert’s list: 172.30.125.50
还是会到最初始的问题,这样可行吗
这是因为你的服务端证书里面 CN 只有 50 这个 IP,但你的客户端却向 52 这个 IP 发起了连接请求。你可以在服务端使用一个同时包含两个 IP 的证书,或者分别为负载均衡器和 emqx 做两个不同的证书。
做了一个包含两个ip的证书,负载均衡通过了,但是emq后台报这个错误,这个是因为什么呢
2023-10-07 16:49:30.468 [error] supervisor: ‘esockd_connection_sup - <0.1707.0>’
errorContext: connection_shutdown
reason: {ssl_error,
{tls_alert,
{handshake_failure,
“TLS server: In state hello at tls_handshake.erl:231 generated SERVER ALERT: Fatal - Handshake Failure\n malformed_handshake_data”}}}
offender: [{pid,<0.9793.0>},
{name,connection},
{mfargs,
{emqx_connection,start_link,
[[{deflate_options,},
{max_conn_rate,500},
{active_n,100},
{zone,external}]]}}]
这个错误是 client 直连 emqx 出的错误吗?如果是就很奇怪,因为连接负载均衡那边用的同样的一套证书却没问题。
- 试试配置对应 listener 的 TLS 协议版本,不使用 tlsv1.3:
tls_versions = tlsv1.2,tlsv1.1,tlsv1
- 可以尝试用 emqx 的最新版本看看是不是有一样的问题(5.3.0)。
如果是负载均衡连接 emqx 出的错,可能是负载均衡那边的配置。
设备连得还是负载均衡,然后通过负载均衡倒到emq,emq报的是这个错误
这个是个 Erlang 层 SSL 握手失败的日志,但它没有准确的指出确切的原因。你抓一个负载均衡 - emqx 之间的握手报文看看吧。
LB 卸载证书后,连接到 EMQX 应该用不带 TLS 的 1883 端口。
只能用1883么 用8883为了通过emqx是验证客户端证书和获取证书的一些参数用来做其他操作