gpt4 book ai didi

客户端的 ssl 版本和密码套件

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:12 25 4
gpt4 key购买 nike

我正在开发一个 soap 服务器,它将为一些带有遗留 soap 协议(protocol)的旧嵌入式计算机提供服务。

我用 go 编写它,到目前为止只使用普通的 http,但在生产中它必须使用 ssl 加密。所以我刚刚创建了一个 key 和一个证书(来自 this site )并使用了 http.ListenAndServeTLS 函数。

但是现在计算机无法连接,服务器只是打印握手错误:

server.go:2848: http: 来自 [::1]:38790 的 TLS 握手错误: tls: 客户端和服务器均不支持密码套件

在文档中,对于计算机来说,不支持 ssl 版本或密码。所以我想知道,如何找出客户端的 ssl 版本,以及客户端支持的可用密码套件。

然后我如何配置 golang http 服务器以使其支持选定的密码。

最佳答案

这里似乎有两个问题,所以让我们分两部分来做:

查找客户端的 TLS 版本和支持的密码套件:

为此,您需要设置 tls.ConfigGetConfigForClient 字段对象。

该字段采用带有签名的方法:

func(*ClientHelloInfo) (*Config, error)

它在收到带有 ClientHelloInfoClient Hello 消息时被调用结构。该结构包含您感兴趣的以下字段:

    // CipherSuites lists the CipherSuites supported by the client (e.g.
// TLS_RSA_WITH_RC4_128_SHA).
CipherSuites []uint16

// SupportedVersions lists the TLS versions supported by the client.
// For TLS versions less than 1.3, this is extrapolated from the max
// version advertised by the client, so values other than the greatest
// might be rejected if used.
SupportedVersions []uint16

请阅读有关 GetConfigForClientClientHelloInfo 的注释,了解 GetConfigForClient 的行为方式和字段详细信息。

指定服务器支持的版本和密码套件:

这也是通过 tls.Config 完成的使用以下字段的对象:

    // CipherSuites is a list of supported cipher suites. If CipherSuites
// is nil, TLS uses a list of suites supported by the implementation.
CipherSuites []uint16

// MinVersion contains the minimum SSL/TLS version that is acceptable.
// If zero, then TLS 1.0 is taken as the minimum.
MinVersion uint16

// MaxVersion contains the maximum SSL/TLS version that is acceptable.
// If zero, then the maximum version supported by this package is used,
// which is currently TLS 1.2.
MaxVersion uint16

例如,您可以使用以下字段设置您的 tls.Config:

    CipherSuites: []uint16{
tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
etc...
tls.TLS_RSA_WITH_AES_256_CBC_SHA,
},

MinVersion: tls.VersionTLS12,

支持的密码套件的完整列表在 tls docs 中.

关于客户端的 ssl 版本和密码套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48498038/

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