現在のSSL接続がアクティブなままでSSLハンドシェイクの再ネゴシエーションを実行することは可能ですか。新しいハンドシェイクが成功すると、サーバーは新しいハンドシェイクの確認で応答する必要があります。
SSL再ネゴシエーションを検索しましたが、具体的なものは見つかりませんでした。このようなことが可能かどうか誰かが知っていますか?
はい、再ネゴシエーションはTLSプロトコルの一部です。クライアントとサーバーの両方で開始できます。サポートは実装によって異なります。また、再ネゴシエーションによりTLSへの攻撃が可能になりました。
私はしばらく前にこの状況に直面し、GoLangを使用していました。再ネゴシエートモードは、tlsCfg.Renegotiationを次のいずれかの値に設定することで設定できます。
次の関数を使用して、要求TLS構成を設定できます。
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
}