我正在try 使用GO语言构建一个OpenSearch客户端.但是,我在ping OpenSearch服务器时遇到错误.错误消息如下:

{"level":"error","time":"2023-04-28T02:29:00+03:00","message":"Failed to build ES client: error pinging elastic server: Get \"https://192.168.8.136:9200/\": x509: certificate signed by unknown authority"}
{"level":"error","time":"2023-04-28T02:29:00+03:00","message":"Failed to initialize service ===>: error possible due to certificate issue"}

我知道此错误与客户端不信任的SSL/TLS证书有关.有谁能提出一个可能的解决方案来解决这个问题?我已经try 禁用证书验证,但没有帮助.首先要感谢您的帮助.

为我写了这个问题,真是太棒了.

推荐答案

我希望此配置允许我使用不受信任的证书

plugins.securtiy.allow_unsafe_democertificates=true

此配置意味着您允许服务器使用演示证书.它不会改变演示证书不受客户端信任的事实.如果要使其正常工作,可以将客户端配置为忽略证书错误:

package main

import (
    "crypto/tls"
    "fmt"
    "net/http"
    "net/http/httputil"
)

func main() {
    req, err := http.NewRequest("GET", "https://localhost:9200", nil)
    if err != nil {
        panic(err)
    }
    req.SetBasicAuth("admin", "admin")

    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: &tls.Config{
                InsecureSkipVerify: true,
            },
        },
    }
    res, err := client.Do(req)
    if err != nil {
        panic(err)
    }

    defer res.Body.Close()

    buf, err := httputil.DumpResponse(res, true)
    if err != nil {
        panic(err)
    }

    fmt.Printf("%s\n", buf)
}

InsecureSkipVerify: true使客户端忽略证书错误.opensearch-go package接受如下所示的相同配置:

cfg := opensearch.Config{
    /// ...
    Transport: &http.Transport{
        TLSClientConfig: &tls.Config{
            InsecureSkipVerify: true,
        },
    },
}

另一个选项是修改opensearch.yml以禁用服务器上的HTTPS:

plugins.security.ssl.http.enabled: false

Note:投产时既不忽略服务器证书错误,也不禁用HTTPS.

Go相关问答推荐

Go PQ驱动程序无法使用默认架构进行查询

为什么我不能使用Docker从本地访问我的Gin应用程序?

GORM没有从 struct 创建完整的表,如何修复?

如何修复proxyconnect tcp:tls:第一条记录看起来不像tls握手

如何修复 Go 中协议缓冲区定义中重新定义的字段?

如何在 zap 记录器库中使用自定义时间函数

go-jwt 令牌验证错误 - 令牌签名无效:密钥类型无效

使用 OpenTelemetry 统一不同服务的范围

Go Build删除信息

在 Go 中解组编号的 XML 标签

Global Thread-local Storage 在 Go 中的可行性和最佳实践

Kubo,来自 IpfsNode.Bootstrap 的无效内存地址或零指针取消引用

Go Programming Language书上的例子server2错了吗?

当客户端同时是服务器时,需要什么 mTLS 证书?

Protobuf.Any - 从 json.RawMessage 解组

从 Makefile 运行时权限被拒绝

NaN 是 golang 中的可比类型吗?

使用go doc命令查看示例函数?

go 是否对 struct 使用空间填充之类的东西?

GORM GIN 更新查询导致 500 内部服务器错误