MonoTouch kullanarak bir SSL bağlantısı için istemci sertifikalarını kullanmaya çalışıyorum. Bu objektif-c kullanarak bunu yapmak için birkaç örnek var gibi görünüyor ve aradığınız çözüm muhtemelen here cevapla ama MonoTouch (C#) benzer.HTTPS İstemci Sertifikaları
MonoTouch'da NSUrlConnection sınıfını kullanıyorum ve kimlik doğrulama sorununu yanıtlamak için NSUrlConnectionDelegate sınıfını geçersiz kıldı.
Sertifikaları dosyadan yükleyebildim, ancak kimlik doğrulama sorununu yanıtlamak için sertifikaların yararlı bir temsilini bulamadım.
public override void ReceivedAuthenticationChallenge(NSUrlConnection connection, NSUrlAuthenticationChallenge challenge)
{
if (string.Equals(challenge.ProtectionSpace.AuthenticationMethod, "NSURLAuthenticationMethodClientCertificate", StringComparison.OrdinalIgnoreCase)) {
string password = "<password_signed_certificate>";
byte[] data = File.ReadAllBytes("<path_of_file_in_ios_sandboxed_filesystem_pkcs>");
NSDictionary opt = NSDictionary.FromObjectsAndKeys(new object[]{password}, new object[]{"passphrase"});
NSDictionary[] items;
SecStatusCode stat = SecImportExport.ImportPkcs12(data, opt, out items); // Uses MonoTouch.Security namespace
MonoTouch.Security.SecTrust trust = (MonoTouch.Security.SecTrust)items[0]["trust"];
// Everything to this point works, and I can inspect the trust object that all the expected certificate properties (IssuerName etc.) are correct
IntPtr secTrustRef = trust // ????? How do I bridge this gap
// NSUrlConnection does not utilise MonoTouch security namespace
NSUrlCredential cred = new NSUrlCredential(secTrustRef, true);
challenge.Sender.UseCredentials(cred, challenge);
}
}
bazı notlar:
- nesnel-c çözümler gördük ama MonoTouch (C#) 'de gerekli olan adımların eşdeğer dizi bulamadık.
- HttpWebRequest, httpWebRequest.ClientCertificates (bir koleksiyon) monotouch uygulaması bir 'uygulanan istisna değil' atar olarak kullanamazsınız.
- Ayrıca sertifikaları başarı ile açmak için Mono.Security.X509 ve System.Security.Cryptography.X509Certificates ad alanlarını kullanmayı denedim, ancak yine de kimlik doğrulama sorgusuna yanıt vermek için sınıf örneklerini kullanamıyorum. Yalnızca bir IntPtr kabul eden bir NSUrlCredential nesnesi oluşturun. Ayrıca, this numaralı telefona da bakın.
NSUrlSession ile bu işin nasıl yapıldığına dair bir fikrin var mı? – nhenrique