MQTTnet: Server and Client Self-signed Error
I am trying to configure TLS on Server and Client.
I’m using openssl First I created a root certificate; Then I created the server certificate; And then I created the client’s certificate; I also generated the server and client pfx files.
Root
openssl genrsa -out root.key 2048
openssl genrsa -des3 -out root.key 2048
openssl req -new -key root.key -out root.csr
openssl x509 -req -days 1095 -sha1 -extensions v3_ca -signkey root.key -in root.csr -out root.crt
openssl pkcs12 -export -out root.pfx -inkey root.key -in root.crt
MQTT Server
openssl genrsa -out mqtt-server.key 2048
openssl req -new -key mqtt-server.key -out mqtt-server.csr
openssl x509 -req -days 1095 -sha1 -extensions v3_req -CA root.crt -CAkey root.key -CAcreateserial -in mqtt-server.csr -out mqtt-server.crt
openssl pkcs12 -export -out mqtt-server.pfx -inkey mqtt-server.key -in mqtt-server.crt
MQTT Client
openssl genrsa -out mqtt-client1.key 2048
openssl req -new -key mqtt-client1.key -out mqtt-client1.csr
openssl x509 -req -days 1095 -sha1 -extensions v3_req -CA root.crt -CAkey root.key -CAcreateserial -in mqtt-client1.csr -out mqtt-client1.crt
openssl pkcs12 -export -out mqtt-client1.pfx -inkey mqtt-client1.key -in mqtt-client1.crt
I created a server project.
MqttNetGlobalLogger.LogMessagePublished += (s, e) =>
{
var trace = $">> [{e.TraceMessage.Timestamp:O}] [{e.TraceMessage.ThreadId}] [{e.TraceMessage.Source}] [{e.TraceMessage.Level}]: {e.TraceMessage.Message}";
if (e.TraceMessage.Exception != null)
{
trace += Environment.NewLine + e.TraceMessage.Exception.ToString();
}
Console.WriteLine(trace);
};
var pfx = new FileInfo("mqtt-server.pfx");
var certificate = new X509Certificate2(pfx.FullName, "password", X509KeyStorageFlags.Exportable);
var optionsBuilder = new MqttServerOptionsBuilder()
.WithEncryptedEndpoint()
.WithEncryptedEndpointPort(1884)
.WithEncryptionCertificate(certificate.Export(X509ContentType.Pfx))
.WithEncryptionSslProtocol(SslProtocols.Tls12);
var options = optionsBuilder.Build();
options.DefaultEndpointOptions.IsEnabled = false;
options.TlsEndpointOptions.ClientCertificateRequired = true;
_mqttServer = new MqttFactory().CreateMqttServer();
await _mqttServer.StartAsync(options);
And I created the client project
MqttNetGlobalLogger.LogMessagePublished += (s, e) =>
{
var trace = $">> [{e.TraceMessage.Timestamp:O}] [{e.TraceMessage.ThreadId}] [{e.TraceMessage.Source}] [{e.TraceMessage.Level}]: {e.TraceMessage.Message}";
if (e.TraceMessage.Exception != null)
{
trace += Environment.NewLine + e.TraceMessage.Exception.ToString();
}
Console.WriteLine(trace);
};
var certCA = new FileInfo("root.crt");
var certificateCA = new X509Certificate2(certCA.FullName);
var cert = new FileInfo("mqtt-client1.pfx");
var certificate = new X509Certificate2(cert.FullName, "password", X509KeyStorageFlags.Exportable);
var options = new MqttClientOptionsBuilder()
.WithClientId("Client1")
.WithTcpServer("127.0.0.1", 1884)
.WithTls(new MqttClientOptionsBuilderTlsParameters
{
AllowUntrustedCertificates = true,
IgnoreCertificateChainErrors = true,
IgnoreCertificateRevocationErrors = true,
UseTls = true,
SslProtocol = System.Security.Authentication.SslProtocols.Tls12,
Certificates = new List<byte[]>
{
certificateCA.Export(X509ContentType.Cert),
certificate.Export(X509ContentType.Pfx)
},
CertificateValidationCallback = (X509Certificate x, X509Chain y, SslPolicyErrors z, IMqttClientOptions o) =>
{
return true;
}
})
.Build();
var client = new MqttFactory().CreateMqttClient();
await client.ConnectAsync(options, CancellationToken.None);
On the server I get the error:
>> [2019-07-10T20:08:57.6945002Z] [1] [MqttTcpServerAdapter.MqttTcpServerListener] [Info]: Starting TCP listener for 0.0.0.0:1884 TLS=True.
>> [2019-07-10T20:08:57.7271618Z] [1] [MqttTcpServerAdapter.MqttTcpServerListener] [Info]: Starting TCP listener for [::]:1884 TLS=True.
>> [2019-07-10T20:08:57.7310994Z] [1] [MqttServer] [Info]: Started.
>> [2019-07-10T20:09:04.2915971Z] [5] [MqttTcpServerAdapter.MqttTcpServerListener] [Verbose]: Client '127.0.0.1:65505' accepted by TCP listener '0.0.0.0:1884, ipv4'.
>> [2019-07-10T20:09:04.8125966Z] [8] [MqttTcpServerAdapter.MqttTcpServerListener] [Error]: Error while handling client connection.
System.Security.Authentication.AuthenticationException: The remote certificate is invalid, according to the validation procedure.
em System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
em System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)
em System.Net.Security.SslStream.EndAuthenticateAsServer(IAsyncResult asyncResult)
em System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
em System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
em MQTTnet.Implementations.MqttTcpServerListener.<TryHandleClientConnectionAsync>d__15.MoveNext()
>> [2019-07-10T20:09:04.8771004Z] [8] [MqttTcpServerAdapter.MqttTcpServerListener] [Verbose]: Client '127.0.0.1:65505' disconnected at TCP listener '0.0.0.0:1884, ipv4'.
In the client:
>> [2019-07-10T20:09:04.1325992Z] [3] [MqttClient] [Verbose]: Trying to connect with server '127.0.0.1:1884' (Timeout=00:00:10).
>> [2019-07-10T20:09:04.7745982Z] [8] [MqttClient] [Verbose]: Connection with server established.
>> [2019-07-10T20:09:04.7857097Z] [3] [MqttClient] [Verbose]: Start receiving packets.
>> [2019-07-10T20:09:04.9707201Z] [8] [MqttClient.MqttChannelAdapter] [Verbose]: TX (21 bytes) >>> Connect: [ClientId=Client1] [Username=] [Password=] [KeepAlivePeriod=15] [CleanSession=True]
>> [2019-07-10T20:09:04.9750988Z] [7] [MqttClient] [Verbose]: Disconnecting [Timeout=00:00:10]
>> [2019-07-10T20:09:04.9981033Z] [7] [MqttClient] [Verbose]: Disconnected from adapter.
>> [2019-07-10T20:09:05.0005994Z] [7] [MqttClient] [Info]: Disconnected.
>> [2019-07-10T20:09:05.0005994Z] [7] [MqttClient] [Verbose]: Stopped receiving packets.
>> [2019-07-10T20:09:14.9960982Z] [3] [MqttClient] [Warning]: Timeout while waiting for packet of type 'MqttConnAckPacket'.
>> [2019-07-10T20:09:14.9991110Z] [3] [MqttClient] [Error]: Error while connecting with server.
What am I doing wrong?
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 17