Votre Raspberry comme EndPoint dans Alexa Skill

Niveau:3

Introduction:

Dans cet article, nous allons mettre en oeuvre une solution pour que vos Skill sur Alexa interagissent directement avec votre Raspberry PI. Cette solution fonctionne que pour des Skill en développement, car le certificat est un certificat auto-signé. Néanmoins, il serait possible d’utiliser un certificat signé par un organisme reconnu. Les serveurs utilisés seront un serveur Apache et un serveur PhP.

Pré-requis:

Vous devez avoir un DNS dynamique (Dynamic DNS, DDNS ou DynDNS). Cette méthode permet de mettre à jour automatiquement un serveur DNS avec l’adresse IP de votre box ou routeur.

Voici quelques sites pour créer un DDNS:

https://www.noip.com/ Ce service est gratuit mais vous devez le renouveler tout les 30 jours.

https://www.spdyn.de/ Ce service est gratuit sans aucune contrainte.

Dans cet article, j’ai utilisé noip.com.

Vous avez bien sur un Raspberry pi avec comme OS: RASPBIAN STRETCH LITE. https://www.raspberrypi.org/downloads/raspbian/

Installation des serveurs et certificats:

Installation du serveur Apache:

Taper les commandes:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apache2

Créer un certificat auto-signé en utilisant OpenSSL:

Commencez par vérifier que openssl est installé sur votre serveur. Vous pouvez vérifier cela avec la commande suivante:

dpkg -l openssl

Afin de créer un certificat SSL qui fonctionne avec Amazon Alexa Skills, vous devez d’abord créer une clé privée à l’aide de l’outil openssl . Nous allons stocker tous les certificats et clés dans le dossier /etc/apache2/ssl. Créer un répertoire pour le stockage de vos certificats.

sudo mkdir /etc/apache2/ssl

Aller dans le répertoire que vous venez de créer.

cd /etc/apache2/ssl

Création de notre certificat:

Création de la clé privée en tapant la commande:

openssl genrsa -out rpi-key.pem 2048

Nous avons créé une nouvelle clé RSA de 2048 bits qui est stockée dans un fichier nommé rpi-key.pem . Plus la clé est longue, plus elle est sécurisée. On appelle RSA,car ce sont les lettres initiales des noms de famille de ses créateurs (Ron Rivest, Adi Shamir et Leonard Adleman).

Nous allons utiliser l’application openssl appelée req  , qui est principalement utilisée pour créer des demandes de certificat, mais nous pouvons également créer un certificat auto-signé . Le certificat pour Amazon a besoin que le nom de domaine complet du serveur hébergeant la compétence soit inclus dans le certificat en tant que nom alternatif. Nous allons créer un fichier de configuration l’application req afin de nous simplifier considérablement les choses.

Taper la commande:

nano configuration.cnf

Et entrer les information ci-dessous:

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
C = FR
ST = PARIS
L = PARIS
O = Domotronic and CO
CN = Domotronic skill

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @subject_alternate_names

[subject_alternate_names]
DNS.1 = votre site.ddns.net

Nom Commun (CN)
Nom de l’organisation (O)
Ville (L)
Région ou Province (ST)
Code Pays (C)

Nous sommes maintenant prêts à créer le certificat auto-signé en tapant la commande ci-dessous:

openssl req -new -x509 -days 365 -key rpi-key.pem -config configuration.cnf -out rpi-certif.pem

Et maintenant nous avons notre certificat appelé rpi-certif.pem qui durera exactement un an à partir d’aujourd’hui.

Configuration du certificat auto-signé sur un serveur Web Apache:

Editer le fichier default-ssl.conf:

sudo nano /etc/apache2/sites-available/default-ssl.conf

Et renseigner les lignes ci dessous dans le fichier.

SSLEngine on

SSLCertificateFile /etc/apache2/ssl/rpi-certif.pem
SSLCertificateKeyFile /etc/apache2/ssl/rpi-key.pem

Ensuite, activez le module SSL pour le serveur Apache et activez le fichier d’hôte virtuel SSL en exécutant les commandes ci-dessous:

sudo a2enmod ssl
sudo a2ensite default-ssl.conf

Et faire un redémarrage du service pour le serveur Apache:

sudo systemctl reload apache2.service

Faire un test en tapant https://192.168.1.4 dans votre navigateur.

Nous avons bien notre message d’erreur car nous avons un certificat auto certifié. Vous pouvez aller dans Advanced pour voir les propriétés de votre certificat.

Installation de PHP:

Taper la commande:

sudo apt-get install php php-opcache libapache2-mod-php php-mysql php-curl php-json php-gd php-mcrypt php-intl php-mbstring php-xml php-zip

Faire un test:

Taper la commande ci dessous pour créer une page d’information sur le serveur PHP.

echo "<?php phpinfo();" >> /var/www/html/phpinfo.php

Puis dans votre navigateur taper: votre adresse ip+/phpinfo.php ou https://ip/phpinfo.php.

Configuration de votre box ou routeur:

Vous devez ouvrir votre port 443 pour que votre Raspberry soit accessible depuis l’extérieure( Service NAT/PAT).

Faire un test avec un proxy en linge. par exemple: https://whoer.net/fr/webproxy

Cela fonctionne parfaitement. Mais si vous essayez en tapant http:// votre adresse cela ne fonctionnera pas car le port n’est pas ouvert sur votre box ou routeur.

Utilisation dans votre SKILL:

Choisir votre EndPoint en https.

Et configurer vos paramètres et uploder votre certificat (fichier : rpi-certif.pem).

Maintenant tout est prêt pour que votre skill aille sur votre Raspberry.

Vous pouvez faire un test avec mon exemple sur mon site : https://caron.ws/diy-cartes-microcontroleurs/alexa/recuperer-ma-station-meteo-via-alexa-damazon/