MS_Mosquitto - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒIoTé¢é£ã®éä¿¡ãããã³ã«ïŒ
- Mosquitto
- RabbitMQ
MQTT ãããŒã«ãŒã® OSS
è£è¶³ïŒMQTT ãš Mosquitto ã®é¢ä¿ïŒ: MQTT ã¯
IoT åãã®è»œéãªã¡ãã»ãŒãžã³ã° ãããã³ã«ïŒOASIS æšæºïŒã
Mosquitto ã¯ãã®ãããŒã«ãŒïŒãµãŒããŒïŒå®è£ ã®ä»£è¡šäŸã§ãã
ïŒEclipse Foundation ã®ãããžã§ã¯ãïŒãRabbitMQ ãšäžŠã¹ãããŠããããæ§æ Œã¯ããªãéãã
Mosquitto RabbitMQ äž»ãããã³ã« MQTT AMQPïŒMQTT ã¯ãã©ã°ã€ã³ïŒ æ³å® 倿°ã®éåãªããã€ã¹ ãµãŒããŒéã®æ¥åã¡ãã»ãŒãžã³ã° ã¢ãã« Topic ãžã® Pub/Sub Exchange / Binding / Queue æ°žç¶å 軜éïŒæ¢å®ã¯ã¡ã¢ãªïŒ ãã¥ãŒã®æ°žç¶åãåæ ãããããªã³ã 極å°ïŒRaspberry Pi ã§ãåãïŒ å€§ããïŒErlang VMïŒ ãã»ã³ãµãŒã倧éã«ãã£ãŠã现ããã¡ãã»ãŒãžãçµ¶ãéãªãéãããªã MQTTã
ãæ¥ååŠçã確å®ã«éåæåãããããªã AMQPããšããäœã¿åãã«ãªãã
éä¿¡ãã人
åä¿¡ãã人
éå信察象ã®ã¡ãã»ãŒãž
ãã¥ãŒ
-
ãããã¯
-
/ããå§ãŸã Unicode UTF-8 æåå - å šé· 65535 ãã€ã以äž
- ãã«æåãå«ãŸãªã
-
-
ã¯ã€ã«ãã«ãŒã
-
#ïŒãã«ãã¬ãã«ã»ã¯ã€ã«ãã«ãŒãïŒãã®é局以äžã®å šãããã¯æååãšäžèŽïŒ -
+ïŒã·ã³ã°ã«ã¬ãã«ã»ã¯ã€ã«ãã«ãŒãïŒåœè©²é局以äžã®å šãããã¯æååãšäžèŽïŒ
-
è£è¶³ïŒTopic èšèšã MQTT ã®èŠïŒ: MQTT ã«ã¯
RabbitMQ ã®ãã㪠Exchange ã®çš®å¥ãç¡ãã
ãã¹ãŠã Topic ã®éå±€æ§é ã§è¡šçŸãããã
ãããã£ãŠãTopic ã®åœåããã®ãŸãŸã«ãŒãã£ã³ã°èšèšã«ãªããfactory/line1/machine3/temperature â â â â äœã®å€ã â â â ã©ã®æ©åšã â â ã©ã®ã©ã€ã³ã â ã©ã®æ ç¹ã factory/line1/+/temperature â line1 ã®å šæ©åšã®æž©åºŠ factory/line1/# â line1 é äžã®ãã¹ãŠç²ããšãããã现ãããšãããžäžŠã¹ãã®ãååã§ã
éé ã«ãããšã¯ã€ã«ãã«ãŒãã§çµããªããªãã
ãŸããåŸããéå±€ãå¢ããã®ã¯é£ããããã
æåã«å°æ¥ã®æ¡åŒµãç¹ã蟌ãå¿ èŠãããããªããåæã®ã
/ããå§ãŸããã¯æ £äŸã§ããã
仿§äžã®å¿ é ã§ã¯ãªãïŒå é ã®/ã¯ç©ºã®éå±€ãäœãããã
å®åã§ã¯ä»ããªãæ¹ãå€ãïŒãè£è¶³ïŒQoSïŒ: åæã®ã³ãŒãã«åºãŠãã QoS ã MQTT ã®äžæ žæŠå¿µã§ããã
QoS ä¿èšŒ çšé 0 At most onceïŒå±ããªãããïŒ é »ç¹ãªã»ã³ãµãŒå€ãèœã¡ãŠãæ¬¡ãæ¥ã 1 At least onceïŒéè€ããããïŒ äžè¬çãªéžæãåªçæ§ãå¿ èŠ 2 Exactly onceïŒ1 åã ãïŒ èª²éã»å¶åŸ¡ãªã©ãæãé ã IoT ã§ã¯å€§åã QoS 0 ã 1 ã§è¶³ããã
QoS 2 ã¯åŸåŸ©ã 4 åå¿ èŠã§ã倧éããã€ã¹ã§ã¯è² è·ã«ãªãã
http://mosquitto.org/download/
>cd C:\Program Files\Mosquitto
>mosquitto -v
- åä¿¡
å šãããã¯ãåä¿¡
>cd C:\Program Files\Mosquitto
>mosquitto_sub -h 127.0.0.1 -t "#" -v
- éä¿¡
test ãããã¯ã«éä¿¡
>cd C:\Program Files\Mosquitto
>mosquitto_pub -h 127.0.0.1 -t test -m "hoge"
- ã€ã³ã¹ããŒã«
- ãªããžããªã远å
$ sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa- ãµãŒããŒïŒã¯ã©ã€ã¢ã³ã
$ sudo apt-get install mosquitto mosquitto-clients-
ãããŒã«ãŒèµ·å
äžèŠ -
éåä¿¡
Windowsãšåãã -
åè
- Mosquitto(MQTT Broker) ã®ã€ã³ã¹ããŒã« - Qiita
https://qiita.com/n-yamanaka/items/73e4d3022186732b4e88
- Mosquitto(MQTT Broker) ã®ã€ã³ã¹ããŒã« - Qiita
-
ã€ã³ã¹ããŒã«
- ãµãŒããŒ
$ sudo apt-get install mosquitto- ã¯ã©ã€ã¢ã³ã
$ sudo apt-get install mosquitto-clients-
ãããŒã«ãŒèµ·å
äžèŠ -
éåä¿¡
Windowsãšåãã -
åè
- Raspberry Pi ã§ IoTïŒMQTT ã§é éæäœç·š ãã®1ïŒMQTT ã§ã®éä¿¡ â æ ªåŒäŒç€Ÿã€ã³ããã³ãã³ã¹ã·ã¹ãã ãºæšªæµ
http://independence-sys.net/main/?p=4054
- Raspberry Pi ã§ IoTïŒMQTT ã§é éæäœç·š ãã®1ïŒMQTT ã§ã®éä¿¡ â æ ªåŒäŒç€Ÿã€ã³ããã³ãã³ã¹ã·ã¹ãã ãºæšªæµ
ããã«ãŠã§ã¢ãªã®ã§ãDockerã®äœæ³ã§åãããã£ãœãã
ïŒãã ããã³ã³ãã£ã°ã»ãã¡ã€ã«ã®æºåã¯å¿
èŠïŒ
https://github.com/OpenTouryoProject/DxCommon/tree/develop/Edge/Mosquitto/IaC
- åè
-
MQTT ã䜿ã£ãŠã¿ãã - Crieit
https://crieit.net/posts/MQTT -
Docker ã§ MQTT éä¿¡ïœç«¹ã®ããã®ããã¯æ¥èš
https://take6shin-tech-diary.com/mqtt-docker/ -
mosquitto(MQTT broker) ã®æ§ç¯æé | SINETStream
https://www.sinetstream.net/server/brokers/mosquitto%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86.html -
Qiita
- Docker ã§ Mosquitto ãåãã㊠MQTT ãš WebSocket éä¿¡ããŠã¿ã
https://qiita.com/danishi/items/bac267e85bc01523f385 - mosquitto ã docker-compose ã§åãã
https://qiita.com/github0013@github/items/7c410216b74f29919da8
- Docker ã§ Mosquitto ãåãã㊠MQTT ãš WebSocket éä¿¡ããŠã¿ã
-
...
- AzureïŒAzure IoT Hub
- AWSïŒAWS IoT CoreïŒããªããžæ©èœïŒ
- GCPïŒCloud Pub/SubïŒ
ç§»è¡ã¡ã¢: åæã® 2 è¡ç®ã¯ãAzureïŒAWS IoT Coreããšãªã£ãŠãããã
AWS ã®èª€èšãšå€æãä¿®æ£ããã
è£è¶³ïŒãããŒãžã ãµãŒãã¹ãšã®éãïŒ: Azure IoT Hub ã¯
MQTT ã話ããããæ±çšã® MQTT ãããŒã«ãŒã§ã¯ãªãç¹ã«æ³šæãèŠãã
Mosquitto Azure IoT Hub Topic èªç±ã«èšèšã§ãã åºå®ïŒ devices/{id}/messages/...ïŒããã€ã¹éã® Pub/Sub ã§ãã ã§ããªãïŒå¿ ãã¯ã©ãŠãçµç±ïŒ ããã€ã¹ç®¡ç ç¡ãïŒèªåïŒ ããã€ã¹ ãã€ã³ãDPSãåæ¹åéä¿¡ èªèšŒ èªåã§æ§æ ããã€ã¹ããšã® ID ãšèšŒææžã管ç ã€ãŸã IoT Hub ã¯ãMQTT äºæã®å ¥å£ãæã€ããã€ã¹ç®¡çåºç€ãã§ããã
æ¢åã® MQTT ã¢ããªããã®ãŸãŸç¹ãçšéã«ã¯åããªãã
çŸå Žã« Mosquitto ã眮ãã
IoT Edge ã§ã¯ã©ãŠããžæ©æž¡ãããæ§æã
å®éã«ã¯ããæ¡ãããã
-
Linux
-
Mosquitto ã§ Username ãš Password ã䜿ã - Qiita
https://qiita.com/ekzemplaro/items/77bfa6274cbddd4b5624 -
Mosquitto(MQTT Broker) ã®ã€ã³ã¹ããŒã« - Qiita > ãã¹ã¯ãŒãèªèšŒ
https://qiita.com/n-yamanaka/items/73e4d3022186732b4e88
-
-
Windows
- mosquitto ã§ãã¹ã¯ãŒãèªèšŒã®èšå®ããã | ã³ãŒããŒé£²ã¿ãªããä»äºããã
https://coffee-nominagara.com/2018-09-25-141304
- mosquitto ã§ãã¹ã¯ãŒãèªèšŒã®èšå®ããã | ã³ãŒããŒé£²ã¿ãªããä»äºããã
-
ãµãŒããŒèªèšŒãšã¯ã©ã€ã¢ã³ãèªèšŒã®äž¡æ¹ãå¯èœã
-
Linux
- Mosquitto(MQTT Broker) ã®ã€ã³ã¹ããŒã« - Qiita > Mosquitto-TLS
https://qiita.com/n-yamanaka/items/73e4d3022186732b4e88
- Mosquitto(MQTT Broker) ã®ã€ã³ã¹ããŒã« - Qiita > Mosquitto-TLS
-
Windows
- mosquitto ã§ OpenSSL ãçšã㊠TLS æ¥ç¶ãã | ã³ãŒããŒé£²ã¿ãªããä»äºããã
https://coffee-nominagara.com/2018-03-07-185728
- mosquitto ã§ OpenSSL ãçšã㊠TLS æ¥ç¶ãã | ã³ãŒããŒé£²ã¿ãªããä»äºããã
æè¿ãæŽæ°é »åºŠãèœã¡ãŠããŠããã
-
èªèšŒãã«å®è£ ã¯ããã¥ãŒããªã¢ã«åŽãåç §ã
- åä¿¡
using System;
using System.Text;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;
namespace M2MqttSub
{
class Program
{
static void Main(string[] args)
{
var client = new MqttClient("127.0.0.1");
client.MqttMsgPublishReceived += (sender, eventArgs) =>
{
var msg = Encoding.UTF8.GetString(eventArgs.Message);
var topic = eventArgs.Topic;
Console.WriteLine(topic + ", " + msg);
};
var ret = client.Connect(Guid.NewGuid().ToString());
Console.WriteLine("Connected with result code {0}", ret);
client.Subscribe(new[] { "test" }, new[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
while (client.IsConnected)
{
}
}
}
}- éä¿¡
using System;
using System.Text;
using uPLibrary.Networking.M2Mqtt;
namespace M2MqttPub
{
class Program
{
static void Main(string[] args)
{
var client = new MqttClient("127.0.0.1");
var ret = client.Connect(Guid.NewGuid().ToString());
Console.WriteLine("Connected with result code {0}", ret);
while (client.IsConnected)
{
var msg = "Test message from Publisher " + DateTime.Now;
client.Publish("test", Encoding.UTF8.GetBytes(msg), 0, true);
Console.WriteLine("Message published.");
System.Threading.Thread.Sleep(1500);
}
}
}
}- åè
è£è¶³ïŒææ°åïŒ: åæã®èŠç«ãŠã®ãšãããPaho M2Mqtt ã¯
çŸåšã»ãŒæŽæ°ãããŠããªãïŒã¢ãŒã«ã€ãç¶æ ïŒã
æ°èŠéçºã§ã¯æ¬¡ã® MQTTnet ãéžã¶ããšããŸããåä¿¡åŽã®
while (client.IsConnected) { }ã¯
CPU ã 100% 䜿ãåãããžãŒã«ãŒãã§ããã
ãµã³ãã«ãšããŠã¯åãããå®è£ ã§ã¯
Console.ReadLine()ãManualResetEventã§åŸ ã€ã¹ã
ïŒåŸè¿°ã® MQTTnet ã®äŸã¯ãããªã£ãŠããïŒã
æŽæ°ãé »ç¹ã§ãããŒã¿ã«ã»ããŠã³ããŒãã Paho M2Mqtt ã®ïŒå以äž
-
以äžã¯èªèšŒãã«å®è£ ã ããèšŒææžæ€èšŒãç¡å¹åããŠããã
CertificateValidationHandler ã§åå ãèŠããšã
SslPolicyErrors.RemoteCertificateChainErrorsãåºãŠããã- åä¿¡
using System;
using System.Text;
using System.Collections.Generic;
using System.Threading.Tasks;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Receiving;
using System.Security.Cryptography.X509Certificates;
namespace msqt_sub
{
class Program
{
private static IMqttClient mqttClient = null;
static async Task Main(string[] args)
{
X509Certificate2 ca = new X509Certificate2("ca.crt");
X509Certificate2 cli = new X509Certificate2("client.pfx", "xxxxx");
var factory = new MqttFactory();
Program.mqttClient = factory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithClientId("ef3614fca42b32d3")
.WithTcpServer("localhost", 8883)
.WithCredentials("guest", "guest")
.WithTls(new MqttClientOptionsBuilderTlsParameters(){
UseTls = true,
SslProtocol = System.Security.Authentication.SslProtocols.Tls12,
AllowUntrustedCertificates = true,
//CertificateValidationCallback = (a, b, c, d) => true,
CertificateValidationHandler = (o) =>
{
Console.WriteLine(o.ToString());
return true;
},
Certificates = new List<X509Certificate>()
{
ca, cli
}
})
.Build();
// æ¥ç¶åŸã®ã€ãã³ããã³ãã©ã®èšå®
Program.mqttClient.ApplicationMessageReceivedHandler
= new MqttApplicationMessageReceivedHandlerDelegate(OnAppMessage);
Program.mqttClient.ConnectedHandler
= new MqttClientConnectedHandlerDelegate(OnConnected);
// æ¥ç¶
await Program.mqttClient.ConnectAsync(options);
// åŸ
æ©
Console.ReadLine();
}
static private async void OnConnected(MqttClientConnectedEventArgs e) {
await Program.mqttClient.SubscribeAsync(
new TopicFilterBuilder()
.WithTopic("test").Build());
}
static private void OnAppMessage(MqttApplicationMessageReceivedEventArgs e)
{
string payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
Console.WriteLine(payload);
}
}
}- éä¿¡
using System;
using System.Text;
using System.Collections.Generic;
using System.Threading.Tasks;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using System.Security.Cryptography.X509Certificates;
namespace msqt_pub
{
class Program
{
private static IMqttClient mqttClient = null;
static async Task Main(string[] args)
{
X509Certificate2 ca = new X509Certificate2("ca.crt");
X509Certificate2 cli = new X509Certificate2("client.pfx", "xxxxx");
var factory = new MqttFactory();
Program.mqttClient = factory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithClientId("ef3614fca42b32d3")
.WithTcpServer("localhost", 8883)
.WithCredentials("guest", "guest")
.WithTls(new MqttClientOptionsBuilderTlsParameters(){
UseTls = true,
SslProtocol = System.Security.Authentication.SslProtocols.Tls12,
AllowUntrustedCertificates = true,
//CertificateValidationCallback = (a, b, c, d) => true,
CertificateValidationHandler = (o) =>
{
Console.WriteLine(o.ToString());
return true;
},
Certificates = new List<X509Certificate>()
{
ca, cli
}
})
.Build();
// æ¥ç¶
await Program.mqttClient.ConnectAsync(options);
// ã¡ãã»ãŒãžã®éä¿¡ããããã®èšå®
var message = new MqttApplicationMessageBuilder()
.WithTopic("test")
.WithPayload("hoge")
.WithExactlyOnceQoS()
.Build();
// ã¡ãã»ãŒãžã®éä¿¡ publish
await Program.mqttClient.PublishAsync(message);
}
}
}- åè
- NuGet
https://www.nuget.org/packages/MQTTnet/ - ããæŽç·Žãããå®è£
https://github.com/OpenTouryoProject/DxCommon/tree/develop/Edge/Mosquitto/Client/CS
- NuGet
è£è¶³ïŒèšŒææžæ€èšŒã®ç¡å¹åã«ã€ããŠïŒ:
AllowUntrustedCertificates = trueãš
CertificateValidationHandlerã§åžžã«trueãè¿ãå®è£ ã¯ã
æ€èšŒãå®å šã«ç¡å¹åããŠãããããäžéè æ»æã«å¯ŸããŠç¡é²åã«ãªãã
åæããç¡å¹åããŠããããšæèšããŠãããšããæ€èšŒçšã®äŸ¿æ³ã§ããã
æ¬çªã§ã¯å¿ ãå€ãããšã
RemoteCertificateChainErrorsãåºãåå ã¯ããããŠã
- èªå·±çœ²å CA ãä¿¡é Œãããã«ãŒãèšŒææ©é¢ã«å ¥ã£ãŠããªãã
- ãµãŒããŒèšŒææžã® CN / SAN ããã¹ãåãšäžèŽããªãã
ã®ã©ã¡ããã§ããã
åæã®ãã¥ãŒããªã¢ã«ã§ãã
CA ãèšŒææžã¹ãã¢ã«å ¥ããæé ãç¹°ãè¿ãåºãŠãããè£è¶³ïŒææ°åïŒ: MQTTnet 㯠v4 以éã§ API ã倧ããå€ãã£ãŠããã
äžèšã®ã³ãŒãã¯ãã®ãŸãŸã§ã¯ãã«ãã§ããªãã
v3ïŒåæïŒ v4 以é MqttClientOptionsBuilderTlsParameters.WithTlsOptions(o => ...)ApplicationMessageReceivedHandlerApplicationMessageReceivedAsyncã€ãã³ãTopicFilterBuilderMqttTopicFilterBuilderMqttFactoryMqttClientFactory
èšŒææžèªèšŒïŒãµãŒããŒèªèšŒãšã¯ã©ã€ã¢ã³ãèªèšŒïŒïŒãã¹ã¯ãŒãèªèšŒãæ§æãã
Paho M2MqttãMQTTnet ããã¢ã¯ã»ã¹ããã
ã³ãã©ãšã³ãã©ãåèã«ãªãã
- èªèšŒå±ã®èšŒææžãäœæããã
>openssl req -new -x509 -days 365 -extensions v3_ca -keyout ca.key -out ca.crt
Generating a RSA private key
................................................+++++
............+++++
writing new private key to 'ca.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:hogeca
Email Address []:
-
ãµãŒããŒèšŒææž
- RSA éµã®äœæ
>openssl genrsa -out server.key 2048
- èšŒææžèŠæ±ã®äœæ
>openssl req -out server.csr -key server.key -new
ïŒç¥ïŒ
Common Name (e.g. server FQDN or YOUR name) []:localhost
- ãµãŒããŒèšŒææžã®çºè¡
>openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
Signature ok
subject=C = JP, ST = Some-State, O = Internet Widgits Pty Ltd, CN = localhost
Getting CA Private Key
Enter pass phrase for ca.key:
-
èšŒææžãã¡ã€ã«ã®é 眮
èšŒææžãã¡ã€ã«ãã€ã³ã¹ããŒã«ã»ãã£ã¬ã¯ããªçŽäžã® certs ãã£ã¬ã¯ããªã«é 眮 -
ãµãŒããŒèšŒææžã®èšå®
mosquitto.conf ã®å é ã«ä»¥äžã远å
listener 8883
cafile ./certs/ca.crt
certfile ./certs/server.crt
keyfile ./certs/server.key
allow_anonymous true
- åäœç¢ºèªãè¡ãã
- conf ãæå®ããŠãããŒã«ãŒèµ·å
>cd C:\Program Files\Mosquitto
>mosquitto -v -c mosquitto.conf
-
éåä¿¡
- åä¿¡
>mosquitto_sub -h localhost -t "#" -v -d -p 8883 --cafile <ca.crtã®ãã¹>
- éä¿¡
>mosquitto_pub -h localhost -t test -m "hoge" -d -p 8883 --cafile <ca.crtã®ãã¹>
-
ãããã©ãã
-
èªèšŒå±ã® CN ãšãµãŒããŒã® CN ãåãå Žåã以äžã®ãšã©ãŒã衚瀺ãããã
- SSL routines:tls_process_server_certificate:certificate verify failed
- SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca
-
Connection error: Connection Refused: not authorised.ãåºãã
ãallow_anonymous trueããèšå®ãã¡ã€ã«ã«è¿œå ããã
-
è£è¶³ïŒãã®ããããã©ãããã¯éèŠïŒ: CA ã® CN ãšãµãŒããŒã® CN ã
åãã«ããŠã¯ãªããªããšããææã¯ãèªå·±çœ²å CA ã䜿ãéã«
極ããŠé »ç¹ã«èžãèœãšã穎ã§ããã
èšŒææžãã§ãŒã³ã®æ€èšŒã§ãCA èªèº«ãšãµãŒããŒèšŒææžã
åºå¥ã§ããªããªãããã«å€±æãããåæã CA ã
hogecaããµãŒããŒãlocalhostãš
æå³çã«åããŠããã®ã¯ãã®ããã§ããããªããçŸåšã® OpenSSL / ã¯ã©ã€ã¢ã³ãã§ã¯ CN ã§ã¯ãªã
SANïŒSubject Alternative NameïŒãå¿ é ã§ããã
CN ã ãã®èšŒææžã¯å€ãã®ã¯ã©ã€ã¢ã³ãã§æåŠãããããã
èšŒææžèŠæ±æã« SAN ãä»ããå¿ èŠããããopenssl req -out server.csr -key server.key -new \ -addext "subjectAltName = DNS:localhost,IP:127.0.0.1"
ã³ãã©ãšã³ãã©ãåèã«ãªãã
-
ã¯ã©ã€ã¢ã³ãèªèšŒ
- RSA éµã®äœæ
>openssl genrsa -out client.key 2048
- èšŒææžèŠæ±ã®äœæ
>openssl req -out client.csr -key client.key -new
ïŒç¥ïŒ
Common Name (e.g. server FQDN or YOUR name) []:hogecli
- ã¯ã©ã€ã¢ã³ãèšŒææžã®çºè¡
>openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
-
èšŒææžãã¡ã€ã«ã®é 眮
èšŒææžãã¡ã€ã«ãã€ã³ã¹ããŒã«ã»ãã£ã¬ã¯ããªçŽäžã® certs ãã£ã¬ã¯ããªã«é 眮 -
ã¯ã©ã€ã¢ã³ãèšŒææžã®èšå®
mosquitto.conf ã«ä»¥äžã远å
require_certificate true
- åäœç¢ºèªãè¡ãã
- conf ãæå®ããŠãããŒã«ãŒèµ·å
>mosquitto -v -c mosquitto.conf
- éåä¿¡
åè¿°ã®éåä¿¡ã³ãã³ãã«ä»¥äžã远å ããŠå®è¡ããã
--cert <client.crtã®ãã¹> --key <client.keyã®ãã¹>
- ãããã©ãã
...
- ãã¹ã¯ãŒããã¡ã€ã«ãçæ
>cd C:\Program Files\Mosquitto
>mosquitto_passwd -c pwfile guest
Password:
Reenter password:
- ãã¹ã¯ãŒãèªèšŒã®æå¹å
mosquitto.conf ã® allow_anonymous åšèŸºã«ä¿®æ£ã»è¿œèš
allow_anonymous false
password_file /etc/mosquitto/pwfile
- åäœç¢ºèªãè¡ãã
- conf ãæå®ããŠãããŒã«ãŒèµ·å
>mosquitto -v -c mosquitto.conf
- éåä¿¡
åè¿°ã®éåä¿¡ã³ãã³ãã«ä»¥äžã远å ããŠå®è¡ããã
-u guest -P guest
- ãããã©ãã
ãã¹ã¯ãŒãã¯ã-pãã§ã¯ãªãã-Pãã§æå®ããã
è£è¶³: å°æåã®
-pã¯ããŒãçªå·ã®æå®ã§ããã
-p guestãšæžããšãããŒãçªå· guestããšè§£éãããŠãšã©ãŒã«ãªãã
-
ã¯ã©ã€ã¢ã³ãèšŒææžãã
*.pfxã«å€æããå¿ èŠãããããã -
pkcs12 ã¯ã©ã€ã¢ã³ãèšŒææžïŒ
*.pfxïŒãåæ
>openssl pkcs12 -export -out client.pfx -inkey client.key -in client.crt
Enter Export Password:
Verifying - Enter Export Password:
-
èªèšŒå±ã®èšŒææžïŒca.crtïŒã¯ãèšŒææžã¹ãã¢ã®
ä¿¡é Œãããã«ãŒãèšŒææ©é¢ã«å ¥ããŠããå¿ èŠãããã -
èšŒææžããã¹ã¯ãŒãã®è¿œå å®è£ ãè¡ãã
X509Certificate2 ca = new X509Certificate2("ca.crt");
X509Certificate2 cli = new X509Certificate2("client.pfx", "xxxxx");
var client = new MqttClient("localhost", 8883, true, ca, cli, MqttSslProtocols.TLSv1_2);
client.ProtocolVersion = MqttProtocolVersion.Version_3_1_1;
var ret = client.Connect(Guid.NewGuid().ToString(), "guest", "guest");-
ãããã°å®è¡ã§åäœç¢ºèª
Windows 㯠Publisher ã ãåäœç¢ºèªæžã¿ã -
åè
- Stack Overflow
- A call to SSPI failed, see inner exception paho m2mqtt Dot.Net(c#) client SSL/TLS connection
https://stackoverflow.com/questions/43993106/a-call-to-sspi-failed-see-inner-exception-paho-m2mqtt-dot-netc-client-ssl-tl - self signed x509 certificate issue in MQTT mosquitto using c#
https://stackoverflow.com/questions/31653754/self-signed-x509-certificate-issue-in-mqtt-mosquitto-using-c-sharp
- A call to SSPI failed, see inner exception paho m2mqtt Dot.Net(c#) client SSL/TLS connection
- Stack Overflow
è£è¶³ïŒãªã
*.pfxãå¿ èŠãïŒ: .NET ã®X509Certificate2ã¯
ç§å¯éµãå«ãã 圢åŒãæ±ããã
OpenSSL ãåºã*.crtïŒèšŒææžã®ã¿ïŒãš*.keyïŒç§å¯éµïŒã¯å¥ãã¡ã€ã«ãªã®ã§ã
PKCS#12ïŒ*.pfx/*.p12ïŒã«åæããå¿ èŠããããclient.crtïŒèšŒææžïŒ â ââââ¶ client.pfxïŒ.NET ãèªããïŒ client.keyïŒç§å¯éµïŒ âãªã .NET 5 以éã§ã¯
X509Certificate2.CreateFromPemFile()ã§
PEM ããçŽæ¥èªããããã«ãªã£ãŠããã倿ã¯å¿ é ã§ã¯ãªããªã£ãã
ã³ãã©ã®å®è£ ã§åäœãããšæãã
- Linux ã§åäœç¢ºèªæžã¿ã
- Windows 㯠Publisher ã ãåäœç¢ºèªæžã¿ã
-
åºæ¬çã«ãWindowsãšåãã
-
以äžã®ããã«è¡šç€ºãããå Žåãsudo ãä»ããã
req: Can't open "ãã¡ã€ã«å" for writing, Permission denied
- key ãã¡ã€ã«ã«æš©éä»äž
mosquitto ã«èªã¿åãæš©éãç¡ããããã
sudo chmod 644 server.key- ãã¡ã€ã«èšå®
ãã¹ã®æå®æ¹æ³ãç°ãªãã
listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
allow_anonymous true
- åŸã¯ã以äžã§åèµ·åã
$ sudo systemctl restart mosquitto- ãã¹ããè¡ãã
â» ca_certificates ãã©ã«ãããã£ãã®ã§ã
ã CA ã®ãã¡ã€ã«ã¯ãã¡ãã«é
眮ããæ¹ãè¯ãã«ã¢ã
- ca.key
- ca.crt
è£è¶³ïŒç§å¯éµã®æš©éïŒ:
chmod 644 server.keyã¯
ç§å¯éµã誰ã§ãèªããç¶æ ã«ãããããæ€èšŒä»¥å€ã§ã¯é¿ããã¹ãã§ããã
æ£ããã¯ææè ã mosquitto ã«ã㊠640 ã«ãããsudo chown root:mosquitto /etc/mosquitto/certs/server.key sudo chmod 640 /etc/mosquitto/certs/server.keyãŸããåæããCA ã®ãã¡ã€ã«ã¯ ca_certificates ãã©ã«ãã®æ¹ãè¯ãã«ã¢ããš
è¿°ã¹ãŠãããšãããCA ã®ç§å¯éµïŒca.keyïŒã¯ãµãŒããŒã«çœ®ãã¹ãã§ã¯ãªã
ïŒèšŒææžã®çºè¡å ãæŒãããšãä»»æã®èšŒææžãåœé ãããããïŒã
çºè¡äœæ¥ã¯å¥ã®å®å šãªå Žæã§è¡ãã
ãµãŒããŒã«ã¯ca.crtã ããé 眮ããã®ãæ£ããã
-
åºæ¬çã«ãWindowsãšåãã
-
以äžã®ããã«è¡šç€ºãããå Žåãsudo ãä»ããã
req: Can't open "ãã¡ã€ã«å" for writing, Permission denied
- key ãã¡ã€ã«ã«æš©éä»äž
mosquitto ã«èªã¿åãæš©éãç¡ããããã
sudo chmod 644 client.key- ãã¡ã€ã«èšå®
以äžã远èš
require_certificate true
- åŸã¯ã以äžã§åèµ·åã
$ sudo systemctl restart mosquitto- ãã¹ããè¡ãã
-
åºæ¬çã«ãWindowsãšåãã
-
以äžã®ããã«è¡šç€ºãããå Žåãsudo ãä»ããã
Error: Unable to open file pwfile for writing. Permission denied.
- ãã¡ã€ã«èšå®
mosquitto.conf ã® allow_anonymous åšèŸºã«ä¿®æ£ã»è¿œèš
allow_anonymous false
password_file ./pwfile
- åŸã¯ã以äžã§åèµ·åã
$ sudo systemctl restart mosquitto- ãã¹ããè¡ãã
-
åºæ¬çã«ãWindowsãšåãã
-
/dev/msqt_pubãšãèšããã©ã«ããäœæ -
ãããžã§ã¯ããäœæã
$ dotnet new console-
VS Code ã§ msqt_pub ãã©ã«ããéã
-
å¿ èŠã«å¿ããŠãšã¯ã¹ãã³ã·ã§ã³ãã€ã³ã¹ããŒã«
- CSharp for Visual Studio Codeãã€ã³ã¹ããŒã«
- NuGet Package Manager ãã€ã³ã¹ããŒã«
- NuGet ã§ M2MqttDotnetCore ãã€ã³ã¹ããŒã«
-
Program.cs ã«ã³ãã©ã®éä¿¡åŠçãå®è£
-
èªèšŒå±ã®èšŒææžïŒca.crtïŒã¯ãèšŒææžã¹ãã¢ã®
ä¿¡é Œãããã«ãŒãèšŒææ©é¢ã«å ¥ããŠããå¿ èŠãããã -
èšŒææžããã¹ã¯ãŒãã®è¿œå å®è£ ãè¡ãã
-
ãããã°å®è¡ã§åäœç¢ºèª
- Windowsãšåãã§åäœããããº
- èšŒææžã¹ãã¢ã®äœçœ®ã«æ³šæãå¿ èŠããšæãã
ã³ãã©ã®å®è£ ã§åäœããã
æ£èŠã® CNãå Žåã«ãã£ãŠã¯ã
èšŒææžã¹ãã¢ãžã®ç»é²ãå¿
èŠãªã®ãããããªãã
-
eclipse/mosquitto: Eclipse Mosquitto - An open source MQTT broker
https://github.com/eclipse/mosquitto -
MQTT ã§å§ãã IoT ããã€ã¹ã®äœãæ¹
第1åïŒãMQTTããç¥ããMosquittoããå°å ¥ããïŒ
MQTT ã§å§ãã IoT ããã€ã¹ã¥ããïŒ1/3 ããŒãžïŒ - MONOist
https://monoist.atmarkit.co.jp/mn/articles/1605/23/news017.html
- Raspberry Pi ã§ mosquitto ã䜿ã
https://qiita.com/ekzemplaro/items/ab90dd630c3ad8e819ab - RaspberryPi ã« Docker ã§ Mosquitto ãç«ãŠãŠãMQTT ãš Websockets
https://qiita.com/hilucky/items/42492e7ef5706b718bbb
- M2Mqtt ã䜿çšãã MQTT ã®ã¯ã©ã€ã¢ã³ããµã³ãã« | OPC Diary
https://opcdiary.net/?p=28785 - C# (.net) ã§äœ¿ãã MQTT ã¯ã©ã€ã¢ã³ã (Paho M2Mqtt) - ã¹ã±éã®ã話
https://www.sukerou.com/2018/08/c-net-mqtt-paho-m2mqtt.html - ãMQTTnetãC# ã§ MQTT ãæ±ã - å°åºäºº newbie ã®æ°ãŸãã
https://www.rect29.com/entry/2021/01/17/234306
Tags: ç§»è¡, éä¿¡æè¡, .NETéçº, IoT