URLSession ile mTLS Bağlantısı Nasıl Kurulur?

0 Yanıt 1 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
Giriş
Mutual TLS (mTLS), iki tarafın birbirine kimlik doğrulaması yaptığı, sunucu ve istemcinin her ikisinin de sertifika kullanarak kimliklerini doğruladığı gelişmiş bir güvenlik protokolüdür. iOS ve Swift'te URLSession kullanarak mTLS bağlantısı kurmak, özellikle API güvenliğini artırmak isteyen uygulamalar için önemli bir adım.

Temel Gereksinimler
İlk olarak, hem istemci hem de sunucu sertifikalarının hazırlanması gerekir. Sunucu, kendi sertifikasıyla birlikte istemci sertifikasını da doğrulamalıdır. İstemci tarafında, özel anahtar ve sertifikalar genellikle PKCS#12 (.p12 veya .pfx) formatında saklanır. Bu sertifikalar, uygulamanın güvenli alanında tutulmalı ve erişilebilir olmalıdır.

İstemci Sertifikasını Yükleme ve Kullanma
iOS'te, URLSession ile mTLS kullanımı için aşağıdaki adımlar izlenir:
  1. Sertifikayı ve özel anahtarı içeren PKCS#12 dosyasını uygulamaya entegre edin.
  2. URLSessionDelegate protokolünü implement ederek, urlSession(_:didReceive:completionHandler:) metodunu kullanın. Bu metotta, gelen bağlantı isteğinde sertifika doğrulaması yapılır ve istemci sertifikası sağlanır.


Örnek kod:
KOD
12345678910111213141516171819202122232425262728293031323334  
class MTLSDelegate: NSObject, URLSessionDelegate {  
  
    let clientPKCS12Data: Data  
  
    init(p12Data: Data) {  
        self.clientPKCS12Data = p12Data  
    }  
  
    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {  
  
        if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodClientCertificate {  
  
            // PKCS#12 dosyasını çözümlüyoruz  
            var items: CFArray?  
            let options = [kSecImportExportPassphrase as String: "parola"] // Sertifika parolası  
            let status = SecPKCS12Import(clientPKCS12Data as CFData, options as CFDictionary, &items)  
  
            if status == errSecSuccess, let certItems = items as? [[String: Any]], let firstItem = certItems.first, let identity = firstItem[kSecImportItemIdentity as String] as? SecIdentity {  
  
                // Kimlik ve sertifikayı kullanarak credential oluşturuyoruz  
                let credential = URLCredential(identity: identity, certificates: nil, persistence: .forSession)  
                completionHandler(.useCredential, credential)  
            } else {  
                // Sertifika alınamazsa bağlantı reddedilir  
                completionHandler(.cancelAuthenticationChallenge, nil)  
            }  
  
        } else {  
            // Diğer doğrulama yöntemleri  
            completionHandler(.performDefaultHandling, nil)  
        }  
    }  
}  


Özet
Bu yapılandırma ile URLSession, hem sunucu sertifikasını doğrular hem de istemci sertifikasını sunucuya ileterek mTLS bağlantısı sağlar. Güvenlik seviyesi arttıkça, sertifika yönetimi ve güvenlik politikaları da dikkatle planlanmalıdır.

İşte temel adımlar ve örnekler bu kadar; detaylı uygulama ve sertifika yönetimi ise kullanım senaryosuna göre şekillenir.

Yanıt vermek için giriş yapmış olmalısınız.

Bu konuyu görüntüleyen kullanıcılar (Toplam: 4, Üyeler: 4, Misafirler: 0)
Toplam: 4 (üyeler: 4, misafirler: 0)
0 alıntı seçildi