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

无法将ElasticSearch IP作为Node URI使用:服务器证书不被信任

解决Serilog连接Docker部署的Elasticsearch证书信任问题

问题根源

Docker部署的Elasticsearch默认使用自签名SSL证书,本地C#应用的HttpClient默认不信任这类证书;而ngrok提供的是受公共CA信任的证书,因此可以正常连接。以下是三种针对性解决方案:


方案一:临时禁用证书验证(仅测试环境)

此方式仅适合测试场景,禁止在生产环境使用,会跳过证书校验带来安全风险。

修改appsettings.json中的Serilog配置,添加disableCertificateValidation参数:

"Serilog": {    
    "Using": [ "Serilog.Sinks.Elasticsearch" ],    
    "MinimumLevel": "Information",    
    "WriteTo": [       
        {
            "Name": "Elasticsearch",          
            "Args": {              
                     "nodeUris": "https://xxx.xxx.xxx.xxx:9200",
                     "connectionGlobalHeaders": "Authorization=Basic xxx",      
                     "indexFormat": "someindex-{0:MM.yyyy}",
                     "autoRegisterTemplate": true,              
                     "autoRegisterTemplateVersion": "ESv7",              
                     "typeName": "",
                     "disableCertificateValidation": true
              }       
        }
    ] 
}     

方案二:导入Elasticsearch自签名证书到本地信任存储(测试/预发布环境)

将Elasticsearch的自签名证书加入本地机器的信任列表,让C#应用认可该证书:

  1. 从Elasticsearch容器导出证书:

    docker cp <你的Elasticsearch容器名>:/usr/share/elasticsearch/config/certs/http_ca.crt ./http_ca.crt
    

    替换<你的Elasticsearch容器名>为实际容器名称,可通过docker ps命令查看。

  2. 导入证书到本地信任存储:

    • Windows:双击http_ca.crt,点击「安装证书」→选择「本地计算机」→选择「将所有证书放入下列存储」→浏览选择「受信任的根证书颁发机构」→完成导入。
    • macOS:双击证书文件,在「钥匙串访问」中找到该证书→右键「显示简介」→在「信任」选项卡设置「使用此证书时」为「始终信任」。
    • Linux:将证书复制到/usr/local/share/ca-certificates/目录,执行sudo update-ca-certificates更新证书列表。
  3. 修改Serilog配置使用https地址(无需禁用验证):

    "Serilog": {    
        "Using": [ "Serilog.Sinks.Elasticsearch" ],    
        "MinimumLevel": "Information",    
        "WriteTo": [       
            {
                "Name": "Elasticsearch",          
                "Args": {                        
                         "nodeUris": "https://xxx.xxx.xxx.xxx:9200",
                         "connectionGlobalHeaders": "Authorization=Basic xxx",      
                         "indexFormat": "someindex-{0:MM.yyyy}",
                         "autoRegisterTemplate": true,              
                         "autoRegisterTemplateVersion": "ESv7",              
                         "typeName": ""
                  }       
            }
        ] 
    }     
    

方案三:配置可信SSL证书(生产环境)

生产环境建议使用受公共CA信任的证书(如Let's Encrypt免费证书):

  1. 获取可信证书文件(fullchain.pem和privkey.pem)。
  2. 修改Elasticsearch Docker部署配置,将证书文件挂载到容器的/usr/share/elasticsearch/config/certs目录。
  3. 更新Elasticsearch的elasticsearch.yml配置,指定证书路径:
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.client_authentication: required
    xpack.security.transport.ssl.certificate_authorities: config/certs/ca/ca.crt
    xpack.security.transport.ssl.certificate: config/certs/http/http.crt
    xpack.security.transport.ssl.key: config/certs/http/http.key
    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.certificate_authorities: config/certs/ca/ca.crt
    xpack.security.http.ssl.certificate: config/certs/http/http.crt
    xpack.security.http.ssl.key: config/certs/http/http.key
    
  4. 重启Elasticsearch容器后,C#应用可直接使用https://xxx.xxx.xxx.xxx:9200地址连接,无需额外配置证书验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:25:25