Add abstraction layer for server certificate.

This commit is contained in:
Christian Kratky
2020-05-26 23:46:43 +02:00
parent e60a732b61
commit c779b394f1
11 changed files with 118 additions and 44 deletions
@@ -44,30 +44,12 @@ namespace MQTTnet.Implementations
if (options.TlsEndpointOptions?.IsEnabled == true)
{
if (options.TlsEndpointOptions.Certificate == null && options.TlsEndpointOptions.X509Certificate == null)
if (options.TlsEndpointOptions.CertificateProvider == null)
{
throw new ArgumentException("TLS certificate is not set.");
}
else if (options.TlsEndpointOptions.Certificate != null && options.TlsEndpointOptions.X509Certificate != null)
{
throw new ArgumentException($"{nameof(MqttServerTlsTcpEndpointOptions.Certificate)} and {nameof(MqttServerTlsTcpEndpointOptions.X509Certificate)} cannot both be set");
}
X509Certificate2 tlsCertificate;
if (options.TlsEndpointOptions.X509Certificate != null)
{
tlsCertificate = options.TlsEndpointOptions.X509Certificate;
}
else if (string.IsNullOrEmpty(options.TlsEndpointOptions.CertificateCredentials?.Password))
{
// Use a different overload when no password is specified. Otherwise the constructor will fail.
tlsCertificate = new X509Certificate2(options.TlsEndpointOptions.Certificate);
}
else
{
tlsCertificate = new X509Certificate2(options.TlsEndpointOptions.Certificate, options.TlsEndpointOptions.CertificateCredentials.Password);
}
var tlsCertificate = options.TlsEndpointOptions.CertificateProvider.GetCertificate();
if (!tlsCertificate.HasPrivateKey)
{
throw new InvalidOperationException("The certificate for TLS encryption must contain the private key.");
@@ -76,13 +58,13 @@ namespace MQTTnet.Implementations
RegisterListeners(options.TlsEndpointOptions, tlsCertificate, _cancellationTokenSource.Token);
}
return Task.FromResult(0);
return PlatformAbstractionLayer.CompletedTask;
}
public Task StopAsync()
{
Cleanup();
return Task.FromResult(0);
return PlatformAbstractionLayer.CompletedTask;
}
protected override void Dispose(bool disposing)