TLS 只让客户端确认服务端是谁;双向 TLS 还要服务端确认客户端是谁。这篇配置 ssl.clientAuth,验证没有证书、冒名证书、合法证书三种连接的结果,再用证书 DN 做 ACL。
TLS 客户端不带证书 → Unexpected throwable | io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: (certificate_required) Received fatal alert: certificate_required 带 client1 证书(CA 签发)→ [zookeeper] 带一张自签名、同样叫 CN=client1 的证书(不是我的 CA 签发)→ Unexpected throwable | io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: (certificate_required) Received fatal alert: certificate_required
client1 的 whoami → Auth scheme: User | ip: 127.0.0.1 | x509: CN=client1 client2 的 whoami → Auth scheme: User | x509: CN=client2 | ip: 127.0.0.1
client1 创建 /only-client1(ACL = x509:CN=client1:cdrwa)→ Created /only-client1 client1 读 → secret client2 读 → Insufficient permission : /only-client1 | Exiting JVM with code 1 getAcl → 'x509,'CN=client1 | : cdrwa
不带证书 → [zookeeper] 带 client1 证书 whoami → Auth scheme: User | ip: 127.0.0.1 | x509: CN=client1