- EMQX校验证书时,如果是自签的根证书是V3版本时,需要扩展字段中有CA:TRUE,不然EMQX可以校验通过,但后面迁移到Nginx,NLB或者HAProxy时会双向认证失败(这对于烧录的设备来说只能返厂重新烧录证书了),因为这几个负载均衡都是使用的Openssl验证证书链,验证规则比较规范完整。而EMQX只验证了客户端证书是不是根证书签发的。【ca属于是用户自己生成的,另外校验这个会增加额外的资源消耗,因此emqx默认没有校验这些–emqx官方回答】
下面是错误的! 不要直接使用最简单的命令签发
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
正确操作,新建ca.conf,扩展字段中需要有CA:TRUE。然后再进行签发
[ req ]
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
C = CN
ST = Guangdong
L = Shenzhen
O = AtomForm
CN = AtomFormRoot
[ v3_ca ]
basicConstraints = critical, CA:TRUE
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
签发证书:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -config ca.conf -extensions v3_ca -out rootCA.pem
-
Nginx和NLB的proxy_protocol协议只支持基本的ip信息传输,不支持卸载证书后提取证书信息向后端透传。所以双向认证后做Auth时拿不到证书信息(如果非要用Nginx和NLB如何实现呢?证书+三元组一起用也可以保证设备信息安全)
-
Nginx Plus(但收费,没试过)和HAProxy支持卸载证书并提取证书信息向后透传,HAProxy需要配置
server emqx_tls_01 8.129.97.0:1883 check-send-proxy send-proxy-v2-ssl-cn
那做Auth时如何拿到证书信息呢?
这里需要开启
然后还是使用username字段提取,这点官方文档没写
