Отговори на тема  [ 25 мнения ]  Отиди на страница Предишна  1, 2
Облаци ... и мента 
Автор Съобщение
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Съб Май 17, 2008 10:01 pm
Мнения: 238
Мнение Re: Облаци ... и мента
Изглежда прилично има ssl сертификат и се ползва порт 8883, гледам се ползва paho.mqtt 8)


Пон Юни 17, 2019 2:01 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10356
Местоположение: Добрич
Мнение Re: Облаци ... и мента
Не разбирам от какво се жалвате толкова ;-)

SSL/TLS си е един приличен протокол, X509 сертификатите също. Аз лично нямам идея за по-добри алтернативи. Ако всичко е подкарано като хората няма нито значим овърхед, нито някакви супер тежки криптирания. Като "недостатъци" виждам само два проблема. Единият е огромното разнообразие от шифри, формати на представяния и т.н. Но такъв е живота както се казва. Другият недостатък е SSL пакетирането, чисто организационно форматът е можело да се пипне, така че да не започва с полета, като дължини и т.н., които не се знаят предварително. Явно е мислен като за РС с достатъчно памет. Но така или иначе това си е проблем на библиотечките, а такива има вече доста и не се предполага да ги пренаписвате.


Пон Юни 17, 2019 9:16 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Облаци ... и мента
за Google IoT Core
пак повтарям - скрипта е за PC - Python 2.xx
използвам го за да тествам настройките, връзка, сертификатите ...

Google IoT Core използва public CA ROOT сертификати
"големия" вариант е https://pki.goog/roots.pem
"малкия" е long-term support domains https://cloud.google.com/iot/docs/how-t ... qtt_domain

ауторизацията в MQTT брокера е парола базирана на JWT (JSON Web Tokens ) криптиране на узер данни


Код:
# pip install cryptography==2.5
# pip install pyjwt==1.7.1
# pip install paho-mqtt

# https://cloud.google.com/iot/docs/quickstart
# Generate a device key pair
#   openssl req -x509 -newkey rsa:2048 -keyout rsa_private.pem -nodes -out rsa_cert.pem -subj "/CN=unused"
# Add rsa_cert.pem to device as RS256_X509
# https://pki.goog/roots.pem
# https://pki.goog/

import os
from os.path import join
import paho.mqtt.publish as publish
import paho.mqtt.client as mqtt
import ssl

import datetime
import jwt
def create_jwt(project_id, private_key_file, algorithm):
    token = {
            'iat': datetime.datetime.utcnow(),
            'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=1000),
            'aud': project_id
    }   
    with open(private_key_file, 'r') as f:
        private_key = f.read()
    return jwt.encode(token, private_key, algorithm=algorithm)

DIR = os.path.dirname(os.path.realpath(__file__)).replace("\\", "/")

#MQTT_HOST        = "mqtt.2030.ltsapis.goog" # https://pki.goog/gsr4/GSR4.crt   export to .cer
MQTT_HOST         = "mqtt.googleapis.com"

#EDIT YOUR PROJECT
DEVICE_ID         = "device_001"
REGION            = "europe-west1"
PROJECT_ID        = "top-suprstate-243612"
REGISTRY          = "wizio"
PRIVATE_KEY_FILE  = join(DIR, "rsa_private.pem")
PASSWORD = create_jwt( PROJECT_ID, PRIVATE_KEY_FILE, "RS256" ) #'RS256' or 'ES256'
#print PASSWORD
CLIENT_ID = join("projects", PROJECT_ID, "locations", REGION, "registries", REGISTRY, "devices", DEVICE_ID).replace("\\", "/")
#print "CLIENT", CLIENT_ID
TOPIC = '/' + join("devices", DEVICE_ID, "events").replace("\\", "/")
#print "TOPIC", TOPIC

AUTH = {'username' : "unused",'password' : PASSWORD }
TLS = {
  'ca_certs' : [ join(DIR, "roots.pem"), join(DIR, "GSR4.cer") ] [ MQTT_HOST == "mqtt.2030.ltsapis.goog" ],
  'tls_version' : ssl.PROTOCOL_TLSv1_2
}

print "---BEGIN---"
publish.single( TOPIC,
      payload   = "Hello world",
      hostname  = MQTT_HOST,
      port      = 8883,   
      client_id = CLIENT_ID,
      auth      = AUTH,
      tls       = TLS,
      protocol  = mqtt.MQTTv311
)
print "----END----"




_________________
main[-1u]={1};


Пон Юни 17, 2019 9:23 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Облаци ... и мента
чак са "изтарикатих" - симулатор за Ардуино си "начуках"
за сега няма периферия :) ам освен Com Port и терминал... ще му сложа мрежа
сигурно ще може да се правят библиотеки - математика, криптитане, интернет

някъв бъг си намерих със concat String - та си търся проблема - така няма нужда да ползвам платка


Прикачени файлове:
arduino-emu.jpg
arduino-emu.jpg [ 247.6 KiB | Прегледано 3702 пъти ]

_________________
main[-1u]={1};
Съб Юни 22, 2019 2:34 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Облаци ... и мента
от предишния пост се получава нящо такова :)
https://www.youtube.com/watch?v=Wm0VVlHtKXg
на Windows ( MinGW ) ... с леки промени може да тръгне и на Linux ( GCC )
идеята е да ползва GCC и за тестове, дебъг, създаване на библиотеки (математика, интернет, разни скриптове ... БЕЗ периферия - пинове, ADC, PWM... )
ако си поиграя може да пусна и COM Port ( тези на машината )

_________________
main[-1u]={1};


Нед Юни 23, 2019 10:54 am
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Съб Май 17, 2008 10:01 pm
Мнения: 238
Мнение Re: Облаци ... и мента
[quote="TheWizard"]чак са "изтарикатих" - симулатор за Ардуино си "начуках"
за сега няма периферия :) ам освен Com Port и терминал... ще му сложа мрежа
сигурно ще може да се правят библиотеки - математика, криптитане, интернет

някъв бъг си намерих със concat String - та си търся проблема - така няма нужда да ползвам платка[/quote

Бе добре ти се е получил симулатора за ардуино , но клипчето в началото го виждам размазанмо малко :) . Но да си призная Debug през Rx Tx UART, Comport си е класика и най си ме кефи. Даа ама съобщенията да са добре форматирани, примерно като на Linux Boot screen :D


Чет Юли 04, 2019 9:43 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Съб Май 17, 2008 10:01 pm
Мнения: 238
Мнение Re: Облаци ... и мента
Аз пък си работя по този пример за Arduino sus MQTTS TLS/SSL сертификат само че има малко ядове с библиотеката но иначе прилична работа за сертификат на ESP32 Wrover:

https://github.com/nhatuan84/esp32-mqtt ... 2mqtts.ino


:mrgreen:


Чет Юли 04, 2019 9:47 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Облаци ... и мента
все пак е Опен - може да си моднеш или да предложите по добро решение...

на Google JWT-от го смятам с това, а някой платформи имат достъп до SHA API-то и може да се модне да не ползва библиотечното SHA
https://github.com/GoogleCloudPlatform/ ... master/src


Даже си намерих бъга ( който е за Quectel BG96 Arduino ) бях омазал realloc() и WString мажеше сбор на стрингове

_________________
main[-1u]={1};


Чет Юли 04, 2019 10:44 pm
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Съб Май 17, 2008 10:01 pm
Мнения: 238
Мнение Re: Облаци ... и мента
Е поне си го открил навреме :) . Иначе гледам има и за Espressif ESP32 - готино ! Има и пример за ардуино с root_cert и private_key_str :


const char *private_key_str =
"6e:b8:17:35:c7:fc:6b:d7:a9:cb:cb:49:7f:a0:67:"
"63:38:b0:90:57:57:e0:c0:9a:e8:6f:06:0c:d9:ee:"
"31:41";

// Time (seconds) to expire token += 20 minutes for drift
const int jwt_exp_secs = 3600; // Maximum 24H (3600*24)

// To get the certificate for your region run:
// openssl s_client -showcerts -connect mqtt.googleapis.com:8883
// for standard mqtt or for LTS:
// openssl s_client -showcerts -connect mqtt.2030.ltsapis.goog:8883
// Copy the certificate (all lines between and including ---BEGIN CERTIFICATE---
// and --END CERTIFICATE--) to root.cert and put here on the root_cert variable.

const char *root_cert =
"-----BEGIN CERTIFICATE-----\n"
"MIIErjCCA5agAwIBAgIQW+5sTJWKajts11BgHkBRwjANBgkqhkiG9w0BAQsFADBU\n"
"MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZpY2VzMSUw\n"
"IwYDVQQDExxHb29nbGUgSW50ZXJuZXQgQXV0aG9yaXR5IEczMB4XDTE5MDYxMTEy\n"
"MzE1OVoXDTE5MDkwMzEyMjAwMFowbTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh\n"
"bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEzARBgNV


но гледам в примера използват "private_key_str " :

void setupCloudIoT() {
device = new CloudIoTCoreDevice(
project_id, location, registry_id, device_id,
private_key_str);

setupWifi();
netClient = new WiFiClientSecure();
mqttClient = new MQTTClient(512);
mqttClient->setOptions(180, true, 1000); // keepAlive, cleanSession, timeout
mqtt = new CloudIoTCoreMqtt(mqttClient, netClient, device);
mqtt->setUseLts(true);
mqtt->startMQTT();
}


Добре е имплементирано, как до сега не ми е попаднал този код - 10х за Темата и автора на темата 8)


Чет Юли 04, 2019 11:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Облаци ... и мента
ей тука леко съм обяснил на гоолето CA
https://github.com/Wiz-IO/platform-wizi ... in.cpp#L16
за long-term са два и ги сменяват така, че ги събери в един файл

_________________
main[-1u]={1};


Пет Юли 05, 2019 4:33 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 25 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни