added ability to specify tls protocol version

This commit is contained in:
JanEggers
2018-10-07 12:10:26 +02:00
parent ffc4f1408a
commit b7ab29473b
3 changed files with 20 additions and 3 deletions
@@ -20,8 +20,8 @@ namespace MQTTnet.Implementations
private readonly CancellationToken _cancellationToken; private readonly CancellationToken _cancellationToken;
private readonly AddressFamily _addressFamily; private readonly AddressFamily _addressFamily;
private readonly MqttServerTcpEndpointBaseOptions _options; private readonly MqttServerTcpEndpointBaseOptions _options;
private readonly MqttServerTlsTcpEndpointOptions _tlsOptions;
private readonly X509Certificate2 _tlsCertificate; private readonly X509Certificate2 _tlsCertificate;
private Socket _socket; private Socket _socket;
public MqttTcpServerListener( public MqttTcpServerListener(
@@ -36,6 +36,11 @@ namespace MQTTnet.Implementations
_tlsCertificate = tlsCertificate; _tlsCertificate = tlsCertificate;
_cancellationToken = cancellationToken; _cancellationToken = cancellationToken;
_logger = logger.CreateChildLogger(nameof(MqttTcpServerListener)); _logger = logger.CreateChildLogger(nameof(MqttTcpServerListener));
if (_options is MqttServerTlsTcpEndpointOptions tlsOptions)
{
_tlsOptions = tlsOptions;
}
} }
public event EventHandler<MqttServerAdapterClientAcceptedEventArgs> ClientAccepted; public event EventHandler<MqttServerAdapterClientAcceptedEventArgs> ClientAccepted;
@@ -75,7 +80,7 @@ namespace MQTTnet.Implementations
if (_tlsCertificate != null) if (_tlsCertificate != null)
{ {
sslStream = new SslStream(new NetworkStream(clientSocket), false); sslStream = new SslStream(new NetworkStream(clientSocket), false);
await sslStream.AuthenticateAsServerAsync(_tlsCertificate, false, SslProtocols.Tls12, false).ConfigureAwait(false); await sslStream.AuthenticateAsServerAsync(_tlsCertificate, false, _tlsOptions.SslProtocol, false).ConfigureAwait(false);
} }
_logger.Verbose("Client '{0}' accepted by TCP listener '{1}, {2}'.", _logger.Verbose("Client '{0}' accepted by TCP listener '{1}, {2}'.",
@@ -1,5 +1,6 @@
using System; using System;
using System.Net; using System.Net;
using System.Security.Authentication;
namespace MQTTnet.Server namespace MQTTnet.Server
{ {
@@ -80,6 +81,12 @@ namespace MQTTnet.Server
return this; return this;
} }
public MqttServerOptionsBuilder WithEncryptionSslProtocol(SslProtocols value)
{
_options.TlsEndpointOptions.SslProtocol = value;
return this;
}
public MqttServerOptionsBuilder WithoutEncryptedEndpoint() public MqttServerOptionsBuilder WithoutEncryptedEndpoint()
{ {
_options.TlsEndpointOptions.IsEnabled = false; _options.TlsEndpointOptions.IsEnabled = false;
@@ -1,4 +1,6 @@
namespace MQTTnet.Server using System.Security.Authentication;
namespace MQTTnet.Server
{ {
public class MqttServerTlsTcpEndpointOptions : MqttServerTcpEndpointBaseOptions public class MqttServerTlsTcpEndpointOptions : MqttServerTcpEndpointBaseOptions
{ {
@@ -8,5 +10,8 @@
} }
public byte[] Certificate { get; set; } public byte[] Certificate { get; set; }
public SslProtocols SslProtocol { get; set; } = SslProtocols.Tls12;
} }
} }