Questo argomento contiene 10 risposte, ha 2 partecipanti, ed è stato aggiornato da  Massimo 2 ore, 3 minuti fa.

Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
  • Autore
    Articoli
  • #3840

    lucaP
    Partecipante

    Nel tentativo di sfruttare Fishino come router di sensori iot sruttando come broker i servizi di Amazon AWS mi sono imbattuto in questo problema:
    Parto da un esempio fornito da Amazon AWS di per Arduino con ESP266
    Sostituendo la classe WiFiSSLClient con la classe Fishino FishinoSecureClient, in compilazione sono generati due errori dovuti alla non definizione dei metodi:

    FishinoSecureClient.setRootCA
    FishinoSecureClient.setClientCertificate

    Mi chiedo se non sono state effettivamente implementate queste due funzioni, indispensabili per la connessione sicura con Amazon o se esiste un workaround o delle diverse librerie compatibili SecureClient e Fishino
    Di segiuto riporto il codice di esempio

    // Basic Amazon AWS IoT example

    #include <WiFi.h>
    #include <Fishino.h>
    #include “RTClib.h” //real time clock
    #include <PubSubClient.h>

    // Update these with values suitable for your network.
    char wlanSsid[] = “my_ssid”; // your network SSID (name)
    char wlanPass[] = “my_pass”; // your network password

    // ======================================= libreria FishinoSecureClient al posto di WiFiSSLClient
    FishinoSecureClient wifiClient;
    //WiFiSSLClient wifiClient;

    PubSubClient client(wifiClient);
    RTC_DS3231 rtc;

    #define THING_NAME “XXXXXXXXX”

    char mqttServer[] = “a2zweh2b7yb784.iot.ap-southeast-1.amazonaws.com”;
    char clientId[] = “fishinoClient”;
    char publishTopic[] = “$aws/things/”THING_NAME”/shadow/update”;
    char publishPayload[MQTT_MAX_PACKET_SIZE];
    char *subscribeTopic[5] = {
    “$aws/things/” THING_NAME “/shadow/update/accepted”,
    “$aws/things/” THING_NAME “/shadow/update/rejected”,
    “$aws/things/” THING_NAME “/shadow/update/delta”,
    “$aws/things/” THING_NAME “/shadow/get/accepted”,
    “$aws/things/” THING_NAME “/shadow/get/rejected”
    };

    char* rootCABuff = \
    “—–BEGIN CERTIFICATE—–\n” \
    “………………………\n” \
    “—–END CERTIFICATE—–\n” ;

    /* Fill your certificate.pem.crt wiht LINE ENDING */
    char* certificateBuff = \
    “—–BEGIN CERTIFICATE—–\n” \
    “……………………….n” \
    “—–END CERTIFICATE—–\n”;

    /* Fill your private.pem.key wiht LINE ENDING */
    char* privateKeyBuff = \
    “—–BEGIN RSA PRIVATE KEY—–\n” \
    “…………….\n” \
    “—–END RSA PRIVATE KEY—–\n”;

    void callback(char* topic, byte* payload, unsigned int length) {
    char buf[MQTT_MAX_PACKET_SIZE];
    char *pch;
    int desired_led_state;

    // do things..
    }

    void setup()
    {
    pinMode(led_pin, OUTPUT);
    digitalWrite(led_pin, led_state);
    /*
    while (status != WL_CONNECTED) {
    Serial.print(“Attempting to connect to SSID: “);
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
    if (status == WL_CONNECTED) break;
    // retry after 1 second
    delay(1000);
    }*/
    WifiConnect();

    // ============================================================
    // !!!!!!!!!!!! ERRORE DI COMPILAZIONE: NON SONO DEFINITI I METODI:
    // FishinoSecureClient.setRootCA((unsigned char*)rootCABuff);
    // FishinoSecureClient.setClientCertificate((unsigned char*)certificateBuff, (unsigned char*)privateKeyBuff);
    // ============================================================

    wifiClient.setRootCA((unsigned char*)rootCABuff);
    wifiClient.setClientCertificate((unsigned char*)certificateBuff, (unsigned char*)privateKeyBuff);

    client.setServer(mqttServer, 8883);
    client.setCallback(callback);

    // Allow the hardware to sort itself out
    delay(1500);
    }

    void loop()
    {
    if (!client.connected()) {
    reconnect();
    }
    client.loop();
    }

    // ========================= WifiConnect() ==============
    // ======================================================
    void WifiConnect()
    {
    // Connect to WiFi access point.
    Serial.println(); Serial.println();
    Serial.print(“Connecting to “);
    Serial.println(wlanSsid);

    Fishino.begin(wlanSsid, wlanPass);
    while(Fishino.status() != STATION_GOT_IP) {
    delay(500);
    Serial.print(“.”);
    }
    Serial.println(“”);
    Serial.print(“WiFi connected – IP address: “); Serial.println(Fishino.localIP());

    // Imposto l’ora se persa l’alimentazione
    if (rtc.lostPower()) {
    Serial.println(“RTC lost power, lets set the time!”);
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    }
    }

    void reconnect() {
    // Loop until we’re reconnected
    while (!client.connected()) {
    Serial.print(“Attempting MQTT connection…”);
    // Attempt to connect
    if (client.connect(clientId)) {
    Serial.println(“connected”);

    for (int i=0; i<5; i++) {
    client.subscribe(subscribeTopic[i]);
    }

    sprintf(publishPayload, “{\”state\”:{\”reported\”:{\”led\”:%d}},\”clientToken\”:\”%s\”}”,
    led_state,
    clientId
    );
    client.publish(publishTopic, publishPayload);
    printf(“Publish [%s] %s\r\n”, publishTopic, publishPayload);

    } else {
    Serial.print(“failed, rc=”);
    Serial.print(client.state());
    Serial.println(” try again in 5 seconds”);
    // Wait 5 seconds before retrying
    delay(5000);
    }
    }
    }

    #3842

    Massimo
    Amministratore del forum

    Ciao,

    Non ho implementato l’impostazione del certificato… solitamente non serve, ed appesantisce le cose.
    Sei sicuro che non accetti la connessione senza l’impostazione del certificato ?

    #3844

    lucaP
    Partecipante

    ciao,
    si sono abbastanza sicuro: AWS vanta la prerogativa della sicurezza. Credo che non ci siano altre possibilità di connessione più ‘unsafe’ 🙁

    sul sito aws propongono diversi kit (non disponibili in Italia) e codici di esempio per le schede Yun e Ameba le cui libreria supporterebbero la connessione con certificato.

    Come sostenitore del made in italy non vorrei essere costretto ad acquistare una di queste a discapito di Fishino.

    saluti

    #3850

    Massimo
    Amministratore del forum

    Ciao,

    vedo quel che riesco a fare, ma non a brevissimo… il problema non è l’ESP ma la flash di Fishino che non è proprio enorme, almeno, sull’ UNO e sul Guppy, per non parlare della RAM.
    La cosa è comunque fattibile, appena faccio il prossimo aggiornamento provvedo ad inserire quelle due funzioni.
    Non le ho messe perchè solitamente l’ HTTPS col Fish lo si usa solo per accedere a siti HTTPS generici, che richiedono sì la connessione sicura ma se ne fregano del certificato annesso.

    Ciao

    Massimo

    #3855

    lucaP
    Partecipante

    Ottimo!
    Ritengo un valido investimento. L’iot muove definitivamente, ed a ragione, verso soluzioni che garantiscono la sicurezza (come non dargli ragione)
    E come Amazon anche Azure e Google
    Buon lavoro! Spero di avere presto tue news. Naturalmente disponibile a testare tue soluzioni Beta

    #3864

    lucaP
    Partecipante

    Ciao massimo
    Ci sono novità per me?
    Ringrazio anticipatamente
    Luca

    #3867

    Massimo
    Amministratore del forum

    Ciao Luca,

    non ancora, spero di riuscire a buttarci un occhio nel week end.
    Sono stato impegnato ad aggiornare packages dell’IDE e librerie… ed è stato un lavoraccio!

    Ciao

    Massimo

    #3917

    Massimo
    Amministratore del forum

    Rieccomi 😉
    Ho completato la riscrittura del firmware, ed adesso dovrebbe essere possibile aggiungere senza problemi l’impostazione del certificato SSL… dovrei aggiornare il tutto entro un paio di settimane, se il lavoro mi da tregua.
    Appena finito ti avviso in modo che lo puoi provare.

    Ciao

    Massimo

    #3947

    Massimo
    Amministratore del forum

    Ciao,

    ho inserito le due funzioni per i certificati… se vuoi puoi provare il firmware 7.0.0
    Devi aggiornare tutto, librerie comprese, ovviamente.
    NON ho collaudato quella funzionalità, non ne ho il modo al momento…

    Ciao

    Massimo

    #3976

    lucaP
    Partecipante

    ciao,
    avevo un po’ di tempo ed ho provato a compilare con firmware 7.0.1 e le ultime librerie ma in compilazione da questi errori, sembra che le due funzioni non sono definite. Sbaglio qualcosa?
    ciao

    amazon_awsiot_fishino1:197: error: ‘class FishinoSecureClient’ has no member named ‘setRootCA’
    wifiClient.setRootCA((unsigned char*)rootCABuff);
    amazon_awsiot_fishino1:198: error: ‘class FishinoSecureClient’ has no member named ‘setClientCertificate’
    wifiClient.setClientCertificate((unsigned char*)certificateBuff, (unsigned char*)privateKeyBuff);

    #3977

    Massimo
    Amministratore del forum

    Ciao,

    hai parzialmente ragione 😉
    Le funzioni sono queste :

    
    		// set client certificate
    		bool setClientCertificate(const uint8_t *buf, uint16_t len);
    		bool setClientCertificate();
    		
    		// det client private key
    		bool setClientPrivateKey(const uint8_t *buf, uint16_t len);
    		bool setClientPrivateKey();
    

    ma sono nella sezione ‘private’ del file fishino.h…. per usarle devi spostarle nella sezione ‘public’ della classe.
    Se riesci a testarle e va tutto bene poi provvedo ad aggiornare il tutto….

Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)

Devi essere loggato per rispondere a questa discussione.