Merge pull request #729 from cslutgen/clientcerts

Add Server certificate password and client certificate builders
This commit is contained in:
Christian
2019-08-09 22:07:26 +02:00
committed by GitHub
5 changed files with 29 additions and 3 deletions
@@ -139,6 +139,13 @@ namespace MQTTnet.Client.Options
return this; return this;
} }
public MqttClientOptionsBuilder WithCredentials(IMqttClientCredentials credentials)
{
_options.Credentials = credentials;
return this;
}
public MqttClientOptionsBuilder WithExtendedAuthenticationExchangeHandler(IMqttExtendedAuthenticationExchangeHandler handler) public MqttClientOptionsBuilder WithExtendedAuthenticationExchangeHandler(IMqttExtendedAuthenticationExchangeHandler handler)
{ {
_options.ExtendedAuthenticationExchangeHandler = handler; _options.ExtendedAuthenticationExchangeHandler = handler;
@@ -48,7 +48,7 @@ namespace MQTTnet.Implementations
throw new ArgumentException("TLS certificate is not set."); throw new ArgumentException("TLS certificate is not set.");
} }
var tlsCertificate = new X509Certificate2(options.TlsEndpointOptions.Certificate); var tlsCertificate = new X509Certificate2(options.TlsEndpointOptions.Certificate, options.TlsEndpointOptions.CertificateCredentials.Password);
if (!tlsCertificate.HasPrivateKey) if (!tlsCertificate.HasPrivateKey)
{ {
throw new InvalidOperationException("The certificate for TLS encryption must contain the private key."); throw new InvalidOperationException("The certificate for TLS encryption must contain the private key.");
@@ -0,0 +1,6 @@
using System;
public interface IMqttServerCredentials
{
String Password { get; }
}
@@ -82,9 +82,10 @@ namespace MQTTnet.Server
return this; return this;
} }
public MqttServerOptionsBuilder WithEncryptionCertificate(byte[] value) public MqttServerOptionsBuilder WithEncryptionCertificate(byte[] value, IMqttServerCredentials credentials = null)
{ {
_options.TlsEndpointOptions.Certificate = value; _options.TlsEndpointOptions.Certificate = value;
_options.TlsEndpointOptions.CertificateCredentials = credentials;
return this; return this;
} }
@@ -94,6 +95,16 @@ namespace MQTTnet.Server
return this; return this;
} }
#if !WINDOWS_UWP
public MqttServerOptionsBuilder WithClientCertificate(RemoteCertificateValidationCallback validationCallback = null, bool checkCertificateRevocation = false)
{
_options.TlsEndpointOptions.ClientCertificateRequired = true;
_options.TlsEndpointOptions.CheckCertificateRevocation = checkCertificateRevocation;
_options.TlsEndpointOptions.RemoteCertificateValidationCallback = validationCallback;
return this;
}
#endif
public MqttServerOptionsBuilder WithoutEncryptedEndpoint() public MqttServerOptionsBuilder WithoutEncryptedEndpoint()
{ {
_options.TlsEndpointOptions.IsEnabled = false; _options.TlsEndpointOptions.IsEnabled = false;
@@ -12,6 +12,8 @@ namespace MQTTnet.Server
public byte[] Certificate { get; set; } public byte[] Certificate { get; set; }
public IMqttServerCredentials CertificateCredentials { get; set; }
public bool ClientCertificateRequired { get; set; } public bool ClientCertificateRequired { get; set; }
public bool CheckCertificateRevocation { get; set; } public bool CheckCertificateRevocation { get; set; }