Skip to content

Commit 8da459d

Browse files
authored
CSHARP-2843: Disable TLS renegotiation when possible (#1520)
1 parent f11014b commit 8da459d

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/MongoDB.Driver/Core/Connections/SslStreamFactory.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,17 @@ public Stream CreateStream(EndPoint endPoint, CancellationToken cancellationToke
5454
{
5555
var sslStream = CreateSslStream(stream);
5656
var targetHost = GetTargetHost(endPoint);
57+
58+
#if NET6_0_OR_GREATER
59+
var options = GetAuthenticationOptions(targetHost);
60+
sslStream.AuthenticateAsClient(options);
61+
#elif NETSTANDARD2_1_OR_GREATER
62+
var options = GetAuthenticationOptions(targetHost);
63+
sslStream.AuthenticateAsClientAsync(options, cancellationToken).GetAwaiter().GetResult();
64+
#else
5765
var clientCertificates = new X509CertificateCollection(_settings.ClientCertificates.ToArray());
5866
sslStream.AuthenticateAsClient(targetHost, clientCertificates, _settings.EnabledSslProtocols, _settings.CheckCertificateRevocation);
67+
#endif
5968
return sslStream;
6069
}
6170
catch
@@ -73,8 +82,14 @@ public async Task<Stream> CreateStreamAsync(EndPoint endPoint, CancellationToken
7382
{
7483
var sslStream = CreateSslStream(stream);
7584
var targetHost = GetTargetHost(endPoint);
85+
86+
#if NETSTANDARD2_1_OR_GREATER || NET6_0_OR_GREATER
87+
var options = GetAuthenticationOptions(targetHost);
88+
await sslStream.AuthenticateAsClientAsync(options, cancellationToken).ConfigureAwait(false);
89+
#else
7690
var clientCertificates = new X509CertificateCollection(_settings.ClientCertificates.ToArray());
7791
await sslStream.AuthenticateAsClientAsync(targetHost, clientCertificates, _settings.EnabledSslProtocols, _settings.CheckCertificateRevocation).ConfigureAwait(false);
92+
#endif
7893
return sslStream;
7994
}
8095
catch
@@ -106,6 +121,17 @@ private void DisposeStreamIgnoringExceptions(Stream stream)
106121
}
107122
}
108123

124+
#if NETSTANDARD2_1_OR_GREATER || NET6_0_OR_GREATER
125+
private SslClientAuthenticationOptions GetAuthenticationOptions(string targetHost) => new()
126+
{
127+
AllowRenegotiation = false,
128+
ClientCertificates = new X509CertificateCollection(_settings.ClientCertificates.ToArray()),
129+
CertificateRevocationCheckMode = _settings.CheckCertificateRevocation ? X509RevocationMode.Online : X509RevocationMode.NoCheck,
130+
EnabledSslProtocols = _settings.EnabledSslProtocols,
131+
TargetHost = targetHost
132+
};
133+
#endif
134+
109135
private string GetTargetHost(EndPoint endPoint)
110136
{
111137
DnsEndPoint dnsEndPoint;

0 commit comments

Comments
 (0)