Bu çalışmada, ESP32 HTTPS tünelleme ve veri şifreleme yöntemlerini kullanarak yerel ve genel ağlardaki IoT donanımlarının siber dayanıklılığını nasıl artırabileceğimizi inceleyeceğiz. Nesnelerin İnterneti (IoT) ekosistemindeki uç noktalar (endpoints), şifresiz kanallar üzerinden internete bağlandıklarında sniffing veya manipülasyon gibi ciddi saldırı vektörlerine maruz kalırlar. Bu tehditlere karşı tünel düzeyinde koruma sağlamanın en efektif yöntemi, taşıma katmanı şifrelemesi sunan HTTPS protokolüdür. Uygun maliyetli ve yüksek performanslı ESP32 mikrodenetleyici kartlarında da SSL/TLS destekli güvenli HTTPS mimarisini kurmak mümkündür.

HTTPS Nedir ve Neden Önemlidir?
HTTPS (HyperText Transfer Protocol Secure), klasik HTTP istek ve yanıt yapılarının TLS (Transport Layer Security) şifreleme zırhıyla korunmuş sürümüdür. HTTPS tünellemesi sayesinde, istemci ile sunucu arasında aktarılan veri paketleri kriptografik olarak tünellenir ve ağdaki aracıların (MITM aktörlerinin) veriyi deşifre etmesi veya manipüle etmesi teknik olarak engellenir. ESP32 gibi IoT donanımlarında bu protokolün kullanılması, kaynak gizliliği, veri bütünlüğü ve sunucu doğrulaması (authentication) açılarından vazgeçilmez bir mühendislik standardıdı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 mimarisinde şifreli HTTPS istekleri çalıştırabilmek için resmi yazılım geliştirme kiti olan ESP-IDF framework’ünü veya yaygın olarak kullanılan Arduino IDE geliştirme ortamını tercih edebilirsiniz. Ağ katmanında asimetrik el sıkışmaları yönetebilmek için WiFiClientSecure kütüphanesinin projeye dahil edilmesi gereklidir.
#include <WiFiClientSecure.h>
Sertifika ve Güvenlik
İletişimin şifrelenebilmesi ve karşı tarafın kimliğinin doğrulanabilmesi için hedef sunucunun dijital SSL/TLS sertifikasına ihtiyaç duyulur. Sertifikalar, ESP32’nin bağlandığı sunucunun gerçekten iddia ettiği servis olduğunu kanıtlar ve taklit sunucular üzerinden yapılacak Ortadaki Adam (MITM) saldırılarını boşa çıkarır.
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ı
Güvenlik mimarisinin eksiksiz kurulabilmesi için el sıkışma (handshake) aşamasında sunucu sertifikasının (SSL/TLS Certificate) doğrulanması zorunludur. Doğrulama yapılmayan şifreli bağlantılar, araya giren saldırganın kendi sahte sertifikasını cihaza sunarak trafiği çözmesine (SSL/TLS interception) olanak tanır. ESP32 HTTPS istemcisi, sunucu kimliğini doğrulamak amacıyla Sertifika Otoritesinin (CA) kök sertifikasını veya pratik senaryolarda sunucuya ait SHA-1 Fingerprint (Parmak İzi) değerini kullanır.
Adımlar:
Sertifika ve Fingerprint Alma:
İlk olarak, bağlantı kurulacak uzak sunucunun sertifikasına ait SHA-1 Fingerprint değerini elde etmelisiniz. Bu parmak izini, web tarayıcınız üzerinden hedef sitenin sertifika detaylarını inceleyerek veya OpenSSL terminal komutları aracılığıyla kolayca 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
Saha cihazlarında telemetri veya sensör verilerinin uzak sunuculara şifreli aktarılması, veri gizliliğini sağlamanın temelidir. ESP32, HTTPS üzerinden sunuculara güvenli veri paketleri (payload) iletebilecek donanımsal şifreleme modüllerine sahiptir.
Adımlar:
- HTTPS POST Metodu ile Veri İletimi:
Cihaz üzerindeki telemetri verilerini buluta göndermek için şifreli HTTPS POST istekleri kullanılır. Bu işlemde veriler genellikle JSON nesneleri halinde paketlenerek tünellenir. - HTTPS GET Metodu:
Uzak sunucudan konfigürasyon dosyası çekmek veya durum sorgulaması yapmak amacıyla tünellenmiş GET istekleri tetiklenir.
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ı:
- SSL/TLS Kripto Şifre Çözümü:
Wireshark’ta şifrelenmiş veri akışını okuyabilmek için oturum anahtarlarına (symmetric session keys) veya sunucuya ait özel anahtara (private key) ihtiyacınız vardır:- 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.
- 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
sslveyatlsprotokolü olarak sınıflandırır. Bu trafiği görmek için filtreleme alanınasslveyatlsyazabilirsiniz. - 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.
- Kriptolu Paket Yapılarının Analizi:
Ağ trafiğini izlerken Wireshark üzerinde SSL/TLS el sıkışma aşamalarını ve şifreli veri aktarım paketlerini şu şekilde ayırt etmelisiniz:- Handshake (El Sıkışma) Paketleri:
Client Hello,Server Hello, sertifika paylaşımı ve anahtar değişimi gibi şifreli oturumun kurulduğu aşamaları gösterir. - Application Data (Uygulama Verisi) Paketleri: Asıl şifreli payload verilerinin (sensör verileri, HTTP istek gövdeleri) taşındığı paketlerdir. Şifre çözme anahtarı sağlandığında Wireshark bu paketleri düz metin (plain text) olarak açar.
- Handshake (El Sıkışma) Paketleri:
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ç
Sonuç olarak, ESP32 projelerinde HTTPS ve güçlü TLS şifreleme mimarilerini hayata geçirmek, uç noktaların siber güvenliğini sağlamak adına atılması gereken en temel mühendislik adımıdır. Şifreli tünelleme ve SHA-1 parmak izi doğrulaması gibi güvenlik katmanlarını kullanarak, sahadaki IoT düğümlerinizi pasif dinleme ve Ortadaki Adam (MITM) saldırılarına karşı tamamen bağışık hale getirebilirsiniz.
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.
