2010-06-11 38 views
10

Birçok farklı site ile iletişim kurmakta olan bir uygulama var ve her site kendi iç CA'mız tarafından imzalanmış kendi SSL sertifikasına sahip. Bunu yapmak, her site (yüzlerce veya binlerce) için SSL sertifikaları satın almamızı ve bu sitelerin her birinde paylaşılan bir anahtar bulunan bir joker kartı kullanarak daha güvenli olmasını önler. Yani, temel olarak bir CA sertifikası kullanmak tek yoldur.iPhone NSURLConnection kullanan bir uygulama için özel CA sertifikası?

Şu anda, CA sertifikasını telefonda bir profil olarak yükleyecek bir mobileprovision dosyası var. Bir iPhone Sertifika hatası aldığında iPhone uygulamamız başladığında, Safari aracılığıyla bu mobil provizyon dosyasına yönlendirilir ve kullanıcı CA'yı yüklemesi istenir.

Sorun, Apple AppStore'un bunu yapmak için uygulamanızı reddedebileceğinden endişelenmem (bu noktada diğer geliştiricilerin sadece bazı geri bildirimleri) ve bunu başarmak için başka yollar araştırmak istediğimdir.

Temel olarak, neyi başarmam gerekiyorsa, uygulamanıza yerleştirilecek özel bir CA sertifikasına karşı doğrulanacak bir SSL bağlantısına izin verilir. Bu, CA sertifikasını yalnızca yaptığım aramalar için aktif hale getirecektir. Hizmetle iletişim kurmak için standart NSURLConnection yöntemlerini kullanıyorum.

Bu mümkün mü? Birisi bana CA'yı (PEM nedir?) Nasıl yüklediğimi ve uygulamanızın güvenilir CA sertifikaları listesine nasıl ekleyebileceğini gösterir mi? Eğer bu mümkün değilse başka seçeneklerim var mı? Sadece tüm sertifikalara güvenmek gerçekten bir seçenek değildir, ortadaki saldırıları önlemek ve sadece CA tarafından verilen sertifikalara güvenmek istiyoruz.

Teşekkürler!

+1

-1 bir yorum yapmadan herhangi sitesine erişmek için NSURLConnection iki temsilci yönteminin altında. Güzel! –

cevap

1

kullanın geçersiz sertifikası

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace 
    { 

      NSLog(@"canAuthenticateAgainstProtectionSpace"); 
     if([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust]) { 
      // Note: this is presently only called once per server (or URL?) until 
      //  you restart the app 
       NSLog(@"Authentication checking is doing"); 
      return YES; // Self-signed cert will be accepted 
      // Note: it doesn't seem to matter what you return for a proper SSL cert 
      //  only self-signed certs 
     } 
     return NO; 
    } 

    - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
    { 
      NSLog(@"didReceiveAuthenticationChallenge"); 
     if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) 
     { 
      [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 
       NSLog(@"chalenging protection space authentication checking"); 
     } 
    } 
+0

Şu anda bunları uygulamıştım ama şu çağrılmıyor :([NSURLRequest setAllowsAnyHTTPSCertificate: YES forHost: [[NSURL URLWithString: url] host]]; – jsetting32

İlgili konular