it:iot:self-signed-certificate

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
it:iot:self-signed-certificate [2023/01/08 18:43] Petr Nosekit:iot:self-signed-certificate [2024/01/01 13:51] (aktuální) Petr Nosek
Řádek 19: Řádek 19:
 </code> </code>
  
-Certifikát byl vygenerován pro server v požadovaném formátu. Takže jsem ho jenom přenesl na server. Ovšem do telefonu je potřeba ještě nainstalovat certifikační autoritu. Program ji vygeneroval hned na začátku. Umístění zjistím:+Certifikát byl vygenerován pro server v požadovaném formátu. Takže jsem ho jenom přenesl na server.  
 + 
 + 
 + 
 +===== Přenesení certifikační autority do telefonu - Android ===== 
 + 
 +Do telefonu je potřeba nainstalovat certifikační autoritu. Program ji vygeneroval hned na začátku. Její umístění zjistím:
  
 <code bash> <code bash>
Řádek 39: Řádek 45:
  
 Soubor jsem si uložil na GDrive a pak jsem šel v telefonu do **Nastavení-> Zabezpečení a poloha -> Rozšířené -> Šifrování a identifikační údaje -> Instalovat z úložiště**. Vybal jsem certifikační autoritu a povolil jsem ji pro VPN a aplikace. Soubor jsem si uložil na GDrive a pak jsem šel v telefonu do **Nastavení-> Zabezpečení a poloha -> Rozšířené -> Šifrování a identifikační údaje -> Instalovat z úložiště**. Vybal jsem certifikační autoritu a povolil jsem ji pro VPN a aplikace.
 +
 +
 +U telefonu jsem potřeboval certifikační autoritu v jiném formátu. Tento příkaz převede soubor CA.pem ve formátu PEM na soubor CA.crt ve formátu DER (CRT).
 +
 +<code bash>
 +openssl x509 -in rootCA.pem -outform DER -out CA.crt
 +</code>
 +
 +
 +===== Převod DER certifikátů pro Arduino =====
 +
 +Potřeboval jsem použít certifikát pro připojení k MQTT serveru přes Arduino. Program pro Arduino je v C. Hledal jsem způsob v jakém formátu dodat certifikáty.
 +
 +Po nějaké době hledání jsem našel způsob. Použil jsem certifikáty v binárním formátu DER. A ty jsem převedl do hexadecimálního formátu skrze nástroj **xxd**. 
 +
 +<code bash>
 +xxd -i client.crt > client_crt.h
 +xxd -i client.key > client_key.h
 +xxd -i ca.crt > ca_crt.h
 +</code>
 +
 +Tímto způsobem jsem získal soubory, ve kterých jsou certifikáty jako pole bajtů.
 +V Arduionu jsem pak mohl načíst tyto soubory a použít:
 +
 +<code cpp>
 +#include <ESP8266WiFi.h>
 +#include <WiFiClientSecure.h>
 +#include <PubSubClient.h>
 +
 +// Vložení certifikátů
 +#include "client_crt.h"  // klientův certifikát
 +#include "client_key.h"  // klientův klíč
 +#include "ca_crt.h"      // CA certifikát (pokud je potřeba)
 +
 +// ... [zbytek vašeho kódu]
 +
 +void setup() {
 +  // ... [připojení k WiFi a další nastavení]
 +
 +  // Nastavení SSL/TLS certifikátů a klíčů
 +  // Proměnné předané v parametrech jsou v obsahu vygenerovaných souborů *.h
 +  BearSSL::X509List cert(cert_der, cert_der_len);
 +  BearSSL::PrivateKey key(key_der, key_der_len);
 +  BearSSL::X509List caCert(ca_der, ca_der_len);
 +  
 +  espClient.setInsecure();
 +  espClient.setClientRSACert(&cert, &key);  // Nastavení klientova certifikátu a klíče
 +  mqttClient.setServer(mqttBroker, mqttPort);
 +
 +  // ... [nastavení MQTT klienta]
 +}
 +
 +// ... [zbytek vašeho kódu]
 +
 +</code>
 +
 +
 +Ještě doplním, že protože používám self signed certifikát, vypínám ověření CA.
 +
  • it/iot/self-signed-certificate.1673203439.txt.gz
  • Poslední úprava: 2023/01/08 18:43
  • autor: Petr Nosek