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

Kibana 9.0.1与Elasticsearch建立HTTPS连接失败求助

解决Kibana 9.0.1与Elasticsearch HTTPS连接失败问题

问题概述

纯内网环境使用官方Docker镜像部署Kibana/Elasticsearch 9.0.1,二者无法建立HTTPS连接:

  • 宿主机执行curl命令可正常连接Elasticsearch:
    # curl -u elastic:$ELASTIC_PASSWORD https://localhost:9200 --cacert /data/elastic-certs/kibana/elasticsearch-ca.pem
    {
      "name" : "01",
      "cluster_name" : "es-docker-cluster",
      "cluster_uuid" : "sKsPHeeNQ3680WxpOm0YVg",
      "version" : {
        "number" : "9.0.1",
        "build_flavor" : "default",
        "build_type" : "docker",
        "build_hash" : "73f7594ea00db50aa7e941e151a5b3985f01e364",
        "build_date" : "2025-04-30T10:07:41.393025990Z",
        "build_snapshot" : false,
        "lucene_version" : "10.1.0",
        "minimum_wire_compatibility_version" : "8.18.0",
        "minimum_index_compatibility_version" : "8.0.0"
      },
      "tagline" : "You Know, for Search"
    }
    
  • Kibana启动失败,报错:
    Unable to retrieve version information from Elasticsearch nodes. Invalid character in header content ["authorization"]
    
  • Kibana容器内curl连接Elasticsearch失败:
    [root@737d4a6496bb kibana]# curl https://elastic-server:9200 --cacert /usr/share/kibana/config/elasticsearch-ca.pem
    curl: (60) SSL: no alternative certificate subject name matches target host name 'elastic-server'
    
  • 证书问题:使用elasticsearch-certutil生成CA时已指定SAN,但证书实际无SAN,该问题从7.x.y版本升级至9.0.1后出现。

关键报错分析

  1. 证书SAN不匹配:Elasticsearch证书未包含容器域名elastic-server的SAN记录,导致Kibana容器内curl时SSL验证失败。
  2. Authorization头非法字符:服务账号Token可能包含特殊字符,或shell解析时引入了多余字符,导致Kibana请求ES时Authorization头无效。

分步解决建议

1. 重新生成包含正确SAN的Elasticsearch证书

  • 用elasticsearch-certutil重新生成证书,明确指定包含容器域名elastic-server的SAN(可同时添加IP或其他需要的主机名):
    docker run --rm -v /data/elastic-certs:/certificates elasticsearch:9.0.1 \
      bin/elasticsearch-certutil cert --ca /certificates/elasticsearch-ca.pem \
      --ca-key /certificates/elasticsearch-ca.key \
      --name elastic-server \
      --dns elastic-server \
      --ip 127.0.0.1,<ES容器实际IP> \
      --out /certificates/elastic-server-cert.pem \
      --key /certificates/elastic-server-key.pem
    
  • 更新Elasticsearch容器的证书挂载配置,使用新生成的证书重启ES服务。

2. 修复Kibana服务账号Token的环境变量配置

  • 先手动验证Token提取结果,确保无多余换行或特殊字符:
    cat /data/elastic-password/ElasticToken | awk -F '= ' '{print $2}'
    
  • 修改Kibana启动命令中ELASTICSEARCH_SERVICEACCOUNTTOKEN的定义,用双引号包裹取值,避免shell解析时引入非法字符:
    --env ELASTICSEARCH_SERVICEACCOUNTTOKEN="$(cat /data/elastic-password/ElasticToken | awk -F '= ' '{print $2}')"
    

3. 调试验证(可选)

  • 在Kibana容器内手动测试Token有效性,确认是否能正常访问ES:
    curl https://elastic-server:9200 --cacert /usr/share/kibana/config/elasticsearch-ca.pem \
      -H "Authorization: Bearer <提取到的服务账号Token>"
    
  • 若仍有SSL验证问题,可临时设置ELASTICSEARCH_SSL_VERIFICATIONMODE="none"(生产环境不建议长期使用,仅用于调试),确认是否是证书问题导致的连接失败。

4. 检查Docker网络配置

  • 确认Elasticsearch容器名称为elastic-server,且与Kibana容器处于同一个elastic-net网络,容器间可通过域名正常解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:30:54