You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular项目用Elasticsearch Client连ES遇证书信任问题求助

解决Angular连接Elasticsearch自签名证书信任问题

针对你遇到的net::ERR_CERT_AUTHORITY_INVALID错误和ES日志中的证书不信任警告,按以下步骤排查修复:

1. 校验CA证书的有效性

  • 确保Angular项目assets/certs/ca.crt是elasticsearch-certutil生成的根CA证书(不是ES节点的证书文件)。生成证书时,工具会输出ca.crt和elastic-certificates.p12,必须将根CA证书放到assets目录。
  • 用openssl验证CA证书:
    openssl x509 -in ca.crt -text -noout
    
    确认输出中Issuer和Subject字段完全一致,证明这是根CA证书。

2. 修正elasticsearch-client的TLS配置

你的代码中tls.ca参数传入了单个证书Buffer,但官方要求传入证书数组。同时node和host配置重复,保留node即可:

// 修正后的客户端配置
this.client = new Client({
  node: 'https://es1:9200',
  requestTimeout: 60000,
  sniffOnStart: false,
  cluster: "CG-cluster",
  auth: {
    username: 'elastic',
    password: 'teledia',
  },
  log: {
    level: 'debug',
  },
  tls: {
    ca: [caCert], // 改为数组格式
    rejectUnauthorized: true,
  }, 
});   

3. 确保ES证书包含正确的主机名/IP

自签名证书必须包含客户端访问时使用的主机名(es1)或IP,否则会触发主机名不匹配验证失败:

  • 重新生成证书,指定主机名和IP:
    ./elasticsearch-certutil cert --ca elastic-stack-ca.p12 --name es1 --dns es1,localhost --ip 172.24.0.2,192.168.2.1
    
  • 替换ES配置目录下的elastic-certificates.p12,重启ES服务。
  • 验证证书的SAN字段:
    openssl pkcs12 -in elastic-certificates.p12 -clcerts -nokeys -text
    
    确认Subject Alternative Name中包含DNS:es1或对应的IP地址。

4. 解决客户端主机名解析问题

确保运行Angular的客户端机器能正确解析es1主机名:

  • 在客户端机器的hosts文件中添加映射:
    172.24.0.2 es1
    

5. 临时调试(仅用于排查,禁止生产环境)

如果以上步骤无效,可临时关闭证书验证,确认是否为证书本身的问题:

tls: {
  ca: [caCert],
  rejectUnauthorized: false, // 临时关闭,生产必须改回true
}, 

6. 清除浏览器缓存

浏览器可能缓存了旧的无效证书,使用无痕模式测试,或手动清除浏览器缓存后重试。


内容的提问来源于stack exchange,提问作者Emily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:27:35