关于EMQX证书遇到坑以及NLB,Nginx,HAProxy反向代理终结证书的一些问题总结

  1. 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
  1. Nginx和NLB的proxy_protocol协议只支持基本的ip信息传输,不支持卸载证书后提取证书信息向后端透传。所以双向认证后做Auth时拿不到证书信息(如果非要用Nginx和NLB如何实现呢?证书+三元组一起用也可以保证设备信息安全)

  2. Nginx Plus(但收费,没试过)和HAProxy支持卸载证书并提取证书信息向后透传,HAProxy需要配置
    server emqx_tls_01 8.129.97.0:1883 check-send-proxy send-proxy-v2-ssl-cn
    那做Auth时如何拿到证书信息呢?
    这里需要开启


    然后还是使用username字段提取,这点官方文档没写

1 个赞