Çapraz Platform Uygulamada Sertifika Pinning: HTTPS Güvenliği

# Çapraz Platform Uygulamada Sertifika Pinning: HTTPS Güvenliği

Uygulamanız sunucuyla HTTPS üzerinden konuşurken, araya giren bir saldırgan sahte sertifika gösterebilir. Sertifika pinning, uygulamaya "sadece bu belirli sertifikaya güven" demektir. Böylece sahte sertifika işe yaramaz.

Örneğin bankacılık uygulamasında, saldırgan ağınızı dinlese bile, uygulamanız sahte sertifikayı reddeder.

Önce sunucunun genel sertifikasını (public certificate) indirmeniz gerekir. Terminal'de:

1openssl s_client -connect api.ornek.com:443 -showcerts < /dev/null | openssl x509 -outform DER > certificate.der

Bu komut `certificate.der` dosyasını oluşturur. Bunu projenizin `assets` klasörüne koyacaksınız.

Flutter'da `http` paketi yerine `dio` kullanmak daha kolaydır:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import 'package:dio/dio.dart';
2import 'dart:io';
3
4final dio = Dio();
5
6// Sertifika dosyasını yükle
7final certificateBytes = await rootBundle.load('assets/certificate.der');
8final securityContext = SecurityContext.defaultContext;
9securityContext.setTrustedCertificates(certificateBytes);
10
11HttpClient httpClient = HttpClient(context: securityContext);
12HttpClientAdapter adapter = HttpClientAdapter();
13adapter.onHttpClientCreate = (_) => httpClient;
14
15dio.httpClientAdapter = adapter;
16
17// API çağrısı
18final response = await dio.get('https://api.ornek.com/data');
19print('Cevap: ${response.data}');

Beklenen çıktı:

1Cevap: {"status": "başarılı", "data": [...]}

React Native'de `react-native-ssl-pinning` kütüphanesini kullanın:

1import { fetch } from 'react-native-ssl-pinning';
2
3const certPath = require('./certificate.der');
4
5fetch('https://api.ornek.com/data', {
6method: 'GET',
7sslPinning: {
8certs: [certPath]
9}
10}).then(response => response.json()).then(data => console.log('Cevap:', data)).catch(error => console.error('Hata:', error));

Beklenen çıktı:

1Cevap: {"status": "başarılı", "data": [...]}

Sertifika geçersizse uygulamanız bağlantıyı reddeder:

1try {
2final response = await dio.get('https://api.ornek.com/data');
3} on DioException catch (e) {
4if (e.type == DioExceptionType.badCertificate) {
5print('Sertifika doğrulaması başarısız!');
6}
7}

- Sertifikayı yılda bir kontrol edin (süresi dolar).
- Geliştirme ve üretim için ayrı sertifikalar kullanın.
- Sertifika değiştiğinde uygulamayı güncelleyin.

Sertifika pinning, uygulamanızı orta-yol saldırılarından (MITM) koruyan güçlü bir kalkan gibidir.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz