IoT Siber Güvenliği: ESP32 HTTPS ile Güvenliği Artırın: HTTPS Protokolü

Bu yazıda, ESP32 HTTPS kullanarak cihazlarınızın güvenliğini nasıl artırabileceğinizi inceleyeceğiz. IoT (Nesnelerin İnterneti) cihazları, internet üzerinden veri iletimi yaparken güvenlik tehditleri ile karşılaşabilir. Bu tehditlere karşı koruma sağlamak için HTTPS protokolü en etkili yöntemlerden biridir. ESP32 gibi küçük IoT cihazlarında da HTTPS kullanarak güvenli iletişim sağlamak mümkündür.

esp32 https tls ssl

HTTPS Nedir ve Neden Önemlidir?

HTTPS, HTTP protokolünün şifreli versiyonudur. HTTPS kullanımı, veri iletimini şifreler ve kullanıcı ile sunucu arasındaki verilerin üçüncü şahıslar tarafından okunmasını engeller. ESP32 gibi IoT cihazları için HTTPS kullanımı, gizliliği koruma, veri bütünlüğü sağlama ve kimlik doğrulama işlemleri açısından kritik bir öneme sahiptir. HTTPS, Man-in-the-Middle (MitM) saldırılarını engeller ve ağdaki güvenliği artırır.


ESP32 HTTPS Kullanımına Başlamak

ESP32 cihazınızda HTTPS kullanabilmek için aşağıdaki adımları takip edebilirsiniz:

Gerekli Kütüphaneler ve Ortam Kurulumu

ESP32 ile HTTPS kullanabilmek için, ESP-IDF veya Arduino IDE gibi geliştirme ortamlarından birini kullanmanız gerekmektedir. Ayrıca, WiFiClientSecure kütüphanesini yükleyerek güvenli bağlantı kurabilirsiniz.

#include <WiFiClientSecure.h>

Sertifika ve Güvenlik

ESP32’nin HTTPS ile iletişim kurabilmesi için sunucunun SSL/TLS sertifikasına ihtiyaç vardır. Sertifikalar, istemcinin (ESP32) sunucuya güvenli bağlantı kurabilmesi için doğrulama işlemini gerçekleştirir.


ESP32 HTTPS İstemcisi Örneği

Aşağıda, ESP32 ile bir HTTPS istemcisi oluşturmak için örnek bir kod verilmiştir. Bu kodda, ESP32, bir HTTPS sunucusuna bağlanarak veri alacak ve alıp yazdıracaktır.

#include <WiFi.h>
#include <WiFiClientSecure.h>

const char* ssid = "WiFi-SSID";
const char* password = "WiFi-Password";
const char* host = "example.com";  // Hedef sunucu
const int httpsPort = 443;  // HTTPS portu

WiFiClientSecure client;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Bağlantı kuruluyor...");
  }
  Serial.println("Bağlantı başarılı!");
  
  if (!client.connect(host, httpsPort)) {
    Serial.println("Bağlantı başarısız!");
    return;
  }

  // HTTPS GET isteği gönder
  client.println("GET / HTTP/1.1");
  client.println("Host: " + String(host));
  client.println("Connection: close");
  client.println();
  
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
  }

  // Cevap verisini yazdır
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }
  client.stop();
}

void loop() {}

HTTPS Sertifika Doğrulaması

ESP32 ile HTTPS kullanırken, bağlantı kurulmadan önce sunucunun SSL/TLS sertifikasını doğrulamak önemlidir. Bu, istemcinin yalnızca güvenilir sunucularla iletişim kurmasını sağlar ve man-in-the-middle saldırılarını engellemeye yardımcı olur. ESP32’nin HTTPS istemcisi, sunucunun sertifikasını doğrulamak için sunucunun SHA-1 fingerprint (parmak izi) değerini kullanır.

Adımlar:

Sertifika ve Fingerprint Alma:

Öncelikle, bağlanmak istediğiniz sunucunun SHA-1 fingerprint (parmak izi) değerini almanız gerekir. Bu değeri genellikle sunucunun SSL sertifikasını inceleyerek bulabilirsiniz. Sertifikayı almak için tarayıcıda sunucuya bağlanıp sertifika bilgilerini kontrol edebilir ve SHA-1 fingerprint değerini alabilirsiniz.

SHA-1 Fingerprint ile Doğrulama Yapma:
ESP32, sunucunun parmak izini doğrulamak için bu bilgiyi kullanır. Sunucu ile bağlantı kurarken, ESP32 sertifikayı doğrular ve parmak izi eşleşirse bağlantıyı kabul eder. Aşağıdaki örnekte, sertifika doğrulaması için parmak izi kullanımı gösterilmektedir:

#include <WiFi.h>
#include <WiFiClientSecure.h>

const char* ssid = "devreyakan";
const char* password = "devreyakan";
const char* host = "example.com";  // Bağlanılacak hedef sunucu
const int httpsPort = 443;  // HTTPS portu

// Sunucu sertifikasına ait SHA-1 Fingerprint
const char fingerprint[] PROGMEM = "XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX";

WiFiClientSecure client;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Bağlantı kuruluyor...");
  }
  Serial.println("Bağlantı başarılı!");

  // Sertifika doğrulaması için parmak izini kontrol et
  client.setFingerprint(fingerprint);
  
  if (!client.connect(host, httpsPort)) {
    Serial.println("Bağlantı başarısız!");
    return;
  }

  // HTTPS GET isteği gönder
  client.println("GET / HTTP/1.1");
  client.println("Host: " + String(host));
  client.println("Connection: close");
  client.println();
  
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
  }

  // Cevap verisini yazdır
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }
  client.stop();
}

void loop() {}

Bu kod, sunucunun SSL sertifikasını doğrulamak için SHA-1 parmak izi kullanır. Eğer parmak izi doğruysa, bağlantı güvenli kabul edilir ve HTTP istekleri yapılabilir.


HTTPS ile Veri Gönderimi

ESP32, HTTPS üzerinden güvenli veri iletimi yapabilir. Bu, özellikle IoT cihazlarının veri gönderme ihtiyaçları için çok önemlidir. Veri, şifreli bir şekilde sunucuya iletilir ve ağ üzerinden güvenli bir şekilde taşınır.

Adımlar:

  1. POST Verisi Gönderme:
    ESP32 ile veri göndermek için POST isteği kullanabilirsiniz. Bu yöntem, sunucuya JSON formatında veri göndermek için yaygın olarak kullanılır. Aşağıda, ESP32’nin bir web sunucusuna JSON formatında veri göndermesi için örnek bir POST isteği bulunmaktadır.
  2. GET İsteği:
    Veri almak için GET isteği göndermek de mümkündür, ancak genellikle veri gönderimi için POST tercih edilir.
POST Verisi Gönderme Örneği:
#include <WiFi.h>
#include <WiFiClientSecure.h>

const char* ssid = "devreyakan";
const char* password = "devreyakan";
const char* host = "example.com";  // Bağlanılacak hedef sunucu
const int httpsPort = 443;  // HTTPS portu

// JSON formatında veri
String data = "{\"sensor\":\"temperature\", \"value\":23.5}";

WiFiClientSecure client;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Bağlantı kuruluyor...");
  }
  Serial.println("Bağlantı başarılı!");

  if (!client.connect(host, httpsPort)) {
    Serial.println("Bağlantı başarısız!");
    return;
  }

  // HTTPS POST isteği gönder
  client.println("POST /data HTTP/1.1");
  client.println("Host: " + String(host));
  client.println("Content-Type: application/json");
  client.println("Content-Length: " + String(data.length()));
  client.println();
  client.print(data);  // JSON verisini gönder
  
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
  }

  // Cevap verisini yazdır
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }
  client.stop();
}

void loop() {}

ESP32 HTTPS ile Güvenliğini Artırma

  • Güncel SSL/TLS Kütüphanelerini Kullanın: Güvenlik açıklarını önlemek için SSL/TLS kütüphanelerini güncel tutun.
  • Sertifika Yönetimi: Sertifikalarınızı düzenli olarak yenileyin ve doğru doğrulama mekanizmalarını kullanın.
  • OTA Güncellemeler: ESP32’nizi Over-the-Air (OTA) güncellemeleriyle güvenli tutun.

Wireshark ile HTTPS Paketlerinin İncelenmesi

Wireshark, ağ trafiğini izlemek ve analiz etmek için güçlü bir araçtır. Ancak, HTTPS gibi şifreli protokoller ile iletilen verileri görmek, Wireshark kullanarak doğrudan mümkün değildir, çünkü HTTPS verisi şifrelenmiştir. Ancak, belirli adımlar ile HTTPS trafiğini ve paketlerini incelemek mümkündür. Bu bölümde, Wireshark kullanarak ESP32 HTTPS bağlantılarındaki şifreli trafiği nasıl analiz edebileceğinizi öğreneceksiniz.

Wireshark ile HTTPS Trafiği İnceleme Adımları:

  1. SSL/TLS Şifrelemesini Çözme:
    HTTPS ile şifrelenmiş verilerin çözülmesi için, şifre çözme anahtarına ihtiyacınız vardır. Bu anahtar, sunucunun SSL/TLS sertifikası ve özel anahtarı ile elde edilir. Wireshark, bu anahtarı kullanarak şifrelenmiş verileri çözebilir.
    • Wireshark’ı açın ve Preferences menüsüne gidin.
    • Protocols sekmesinde SSL‘i seçin.
    • RSA Keys List bölümüne sunucunun özel anahtarını ekleyin (bunu yapabilmek için, özel anahtarın sunucudan erişilebilir olması gerekir).
    • Ayrıca, SSL Debugging seçeneğini etkinleştirerek şifre çözme işlemini kolaylaştırabilirsiniz.
  2. Wireshark ile HTTPS Trafiğini Yakalama:
    • İzleme Başlatma: Wireshark’ı başlatın ve ağ arayüzünüzü seçin (Wi-Fi veya Ethernet).
    • Filtreleme: Wireshark, şifreli HTTPS trafiğini ssl veya tls protokolü olarak sınıflandırır. Bu trafiği görmek için filtreleme alanına ssl veya tls yazabilirsiniz.
    • Sunucuya Bağlantı Kurma: ESP32 cihazınız HTTPS üzerinden bir sunucuya bağlandığında, bu bağlantı Wireshark tarafından yakalanabilir. ESP32 cihazınızdan veya diğer istemcilerden gelen bağlantı istekleri bu filtre ile görüntülenebilir.
  3. HTTPS Paketlerini Görüntüleme:
    HTTPS trafiğini görmek için Wireshark şifreli veri paketlerinin içinde SSL Handshake’i ve Application Data paketlerini incelemeniz gerekir.
    • Handshake Paketi: Bu paket, istemci ve sunucu arasındaki SSL/TLS bağlantısının kurulumunu içerir. Bu aşama sırasında şifreleme algoritmaları seçilir ve oturum anahtarları oluşturulur.
    • Application Data Paketi: Bu paketler, aslında şifreli veri içerir ve genellikle HTTPS istek ve yanıtları burada bulunur. Wireshark, bu veriyi çözümlendiği zaman HTTP istekleri ve cevapları gibi bilgileri görüntüleyebilir.

Wireshark’ta HTTPS Paketlerini Çözme ve Görüntüleme

Wireshark, şifreli HTTPS trafiğini çözebilmek için aşağıdaki bilgileri talep eder:

  • Sunucu Sertifikası ve Özel Anahtar: HTTPS oturumu için şifre çözme anahtarına ihtiyacınız vardır. Bu, genellikle sunucu tarafından sağlanabilir, ancak test ve analiz için genellikle kendi yerel sunucularınızda kullanılır.
  • SSL Key Log File: Bir başka yöntem de SSL Key Log File kullanmaktır. Bu, SSL bağlantılarını çözmek için kullanılabilir. Eğer sunucu tarafından SSL Key Log File oluşturuluyorsa, bu dosyayı Wireshark’a verebilirsiniz.

Wireshark’ta şifreli HTTPS verilerini çözebilmek için doğru sertifikayı ve şifre çözme anahtarlarını sağladıktan sonra, paketlerdeki veriyi görmek mümkün olacaktır. Wireshark, şifreli paketlerin içeriğini açık bir şekilde gösterecek ve HTTPS trafiği açık metin formatında görünecektir.

Sonuç

ESP32 HTTPS kullanmak, IoT projelerinizde güvenliği sağlamak için kritik bir adımdır. HTTPS protokolü ile cihazlarınız arasındaki veri iletimi şifrelenir, bu da siber saldırılara karşı korunmanızı sağlar. Yukarıdaki adımları takip ederek ESP32’nizi güvenli bir şekilde yapılandırabilir ve verilerinizi güvenle iletebilirsiniz.

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.