1

是否可以在当前 SSL 连接保持活动状态时重新协商 SSL 握手。当新的握手成功时,服务器应该响应新握手的确认。

我搜索了 SSL 重新协商,但找不到任何具体的内容。有谁知道这样的事情是否可能?

4

2 回答 2

2

是的,重新协商是 TLS 协议的一部分。它既可以是客户端启动的,也可以是服务器启动的。对它的支持取决于实现。此外,重新协商使对 TLS的攻击成为可能。

于 2013-03-19T16:16:17.957 回答
0

我曾经遇到过这种情况,我们使用的是 GoLang。可以通过将 tlsCfg.Renegotiation 设置为以下值之一来设置重新协商模式:

  1. 从不重新协商
  2. RenegotiateOnceAsClient
  3. 在https://golang.org/src/crypto/tls/common.go中定义的RenegotiateFreelyAsClient

以下函数可用于设置请求 TLS Config。

func (r *request) SetRenegotiationMode(mode string) (IRequest, error) {

    modeMap := map[string]tls.RenegotiationSupport{
        "once":   tls.RenegotiateOnceAsClient,
        "freely": tls.RenegotiateFreelyAsClient,
        "never":  tls.RenegotiateNever,
    }

    if val, ok := modeMap[mode]; ok {
        if r.tlsCfg == nil {
            r.tlsCfg = &tls.Config{}
        }
        r.tlsCfg.Renegotiation = val
    } else {
        //if anything other than the allowed values is passed, it'll thrown an error
        return nil, <DEFINE AN ERROR>
    }

    return r, nil
}
于 2019-09-27T06:00:56.133 回答