gpt4 book ai didi

http - 如何将 CAFile 添加到我们的证书中

转载 作者:IT王子 更新时间:2023-10-29 02:18:49 26 4
gpt4 key购买 nike

我们在 docker 容器中使用网络服务器。目前我们的公私钥工作正常。我们遇到的问题是,当我们使用 https://www.ssllabs.com/ 测试我们的网站时,我们的 CAFile 没有作为提供的证书包含在内。 .查看解决方案后,我尝试将认证添加到 caCertPool 并将其添加到配置中。即使在这样做之后,SSL Labs 仍然说它没有看到它,我们仍然得到 B 分数。这是到目前为止我尝试的代码片段,没有运气。

certs, err := newStaticCerts(&static.Config{UseStaticFiles: cfg.IsProduction, FallbackToDisk: true, AbsPkgPath: getMessagePath()})
        if err != nil {
            log.WithFields(log.F("error", err)).Fatal("Issue initializing static certs")
        }

        httpKey, err := certs.ReadFile("/certs/website.com.key")
        if err != nil {
            log.WithFields(log.F("error", err)).Fatal("Issue loading tls key")
        }

        httpPem, err := certs.ReadFile("/certs/website.com.pem")
        if err != nil {
            log.WithFields(log.F("error", err)).Fatal("Issue loading tls pem")
        }

        caFilePem, err := certs.ReadFile("/certs/CAFile.pem")
        if log.CheckErr(err, "Issue loading CAFile pem") {
            return
        }

        // Load client cert
        cert, err := tls.X509KeyPair(httpPem, httpKey)
        if err != nil {
            log.Fatal(err)
        }

        caCertPool := x509.NewCertPool()
        caCertPool.AppendCertsFromPEM(caFilePem)

        tlsConfig := &tls.Config{
            MinVersion: tls.VersionTLS12,
            CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
            PreferServerCipherSuites: true,
            CipherSuites: []uint16{
                tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
                tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
                tls.TLS_RSA_WITH_AES_256_GCM_SHA384,
                tls.TLS_RSA_WITH_AES_256_CBC_SHA,
            },
            Certificates: []tls.Certificate{cert},
            RootCAs: caCertPool,
        }

        tlsConfig.BuildNameToCertificate()

        //server := &http.Server{Addr: ":" + strconv.Itoa(cfg.AppPort), Handler: p.Serve(), TLSConfig: tlsConfig}
        srv := &http.Server{
            Addr: ":" + strconv.Itoa(cfg.AppPort),
            Handler: p.Serve(),
            TLSConfig: tlsConfig,
            TLSNextProto: make(map[string]func(*http.Server, *tls.Conn, http.Handler), 0),
        }

        err = kmshttp.RunServer(srv)
        if log.CheckErr(err, "shutting down server") {
            return
        }

问题是当我们检查我们的证书路径时,我们的 RSA CA是“额外下载”,不包含在我们的网站上。

最佳答案

来自tls.Config documentation :

Certificates contains one or more certificate chains to present to the other side of the connection.

[...]

RootCAs defines the set of root certificate authorities that clients use when verifying server certificates.

RootCAs 字段对服务器没有任何作用。您只需在 Certificates 字段中设置完整的证书链(不包括根 CA;这在技术上不会破坏任何东西,只会浪费带宽)。

您还没有显示 certs.ReadFile 做了什么,但您只需要确保它返回 PEM 编码的叶证书和中间证书(即“额外下载”的证书) "), 按此顺序连接。 tls.X509KeyPair 自动构建链。

关于http - 如何将 CAFile 添加到我们的证书中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56632176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com