MQTT为了加强安全性,是支持Tls的安全模式连接的。在安全连接模式下,默认的服务端口由1883变更为8883,且使用CA证书来保证通讯双方的安全性。
MQTTX官方开源了一个多种编程语言的客户端连接Demo,其中C#版本的是基于MQTTnet库的,项目地址如下:
https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Csharp/MqttNetTLSClient
Client代码如下:
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Packets;
using MQTTnet.Protocol;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using System.Text;
namespace MqttClient
{
public static class Client
{
public static async Task TlsClientWithCA(string caFile)
{
var mqttFactory = new MqttFactory();
X509Certificate2 cacert = new X509Certificate2(File.ReadAllBytes(caFile));
using (var mqttClient = mqttFactory.CreateMqttClient())
{
var mqttClientOptions = new MqttClientOptionsBuilder().WithTcpServer("192.168.1.139", 8883)
.WithCredentials("emqx", "emqx123")
.WithTls(
new MqttClientOptionsBuilderTlsParameters()
{
UseTls = true,
SslProtocol = System.Security.Authentication.SslProtocols.Tls12,
CertificateValidationHandler = (certContext) =>
{
X509Chain chain = new X509Chain();
chain.ChainPolicy.Revocat