是否可以在当前 SSL 连接保持活动状态时重新协商 SSL 握手。当新的握手成功时,服务器应该响应新握手的确认。
我搜索了 SSL 重新协商,但找不到任何具体的内容。有谁知道这样的事情是否可能?
是的,重新协商是 TLS 协议的一部分。它既可以是客户端启动的,也可以是服务器启动的。对它的支持取决于实现。此外,重新协商使对 TLS的攻击成为可能。
我曾经遇到过这种情况,我们使用的是 GoLang。可以通过将 tlsCfg.Renegotiation 设置为以下值之一来设置重新协商模式:
以下函数可用于设置请求 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
}