Сертификаты клиента HTTPS с Monotouch

Я пытаюсь использовать клиентские сертификаты для подключения SSL, используя MonoTouch. Кажется, есть несколько примеров для этого, используя цель-c, и решение, которое я ищу, вероятно, будет похоже на тот, на который мы ответили, но в MonoTouch (C #).

Я использую класс NSUrlConnection в MonoTouch и переопределил класс NSUrlConnectionDelegate, чтобы ответить на вызов аутентификации.

Я смог загрузить сертификаты из файла, но мне не удалось найти полезное представление сертификатов для ответа на вызов проверки подлинности.

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); } } 

Некоторые примечания:

  1. Я видел цели-c решения, но я не нашел эквивалентный набор шагов, необходимых в MonoTouch (C #).
  2. Я не могу использовать HttpWebRequest, поскольку реализация monotouch httpWebRequest.ClientCertificates (коллекция) выдает «не реализованное исключение».
  3. Я также попытался использовать Mono.Security.X509 и System.Security.Cryptography.X509Certificates namespaces, чтобы успешно открывать сертификаты, но снова я не могу использовать экземпляры класса для ответа на вызов аутентификации, поскольку мне нужно создать NSUrlCredential объект, который принимает только IntPtr.
  4. См. Также это .

2 Solutions collect form web for “Сертификаты клиента HTTPS с Monotouch”

У меня нет серверной среды, настроенной для этого, но попробуйте это:

Заменить:

 ... MonoTouch.Security.SecTrust trust = (MonoTouch.Security.SecTrust)items[0]["trust"]; IntPtr secTrustRef = trust ... 

с:

 ... NSObject obj = items[0]["trust"]; IntPtr secTrustRef = obj.Handle; ... create and use your credentials GC.KeepAlive (obj); // just in case ;-) ... 

Используйте HttpWebRequest. В вопросе примечания пункт 2 я сказал, что свойство HttpWebRequest.ClientCertificates вызывает исключение, которое не было реализовано, и поэтому я исключил эту опцию. Это делается, если вы попытаетесь установить это свойство с новой коллекцией, но если вы просто используете Access Access, вы можете добавить сертификат клиента в коллекцию.

В качестве дополнительной заметки использование HttpWebRequest делает приложение более переносимым для других устройств, что является частью причины, по которой мы используем MonoDevelop, так что это беспроигрышное.

  • RegisterForRemoteNotificationTypes заставляет пользовательский интерфейс зависать
  • почему предварительный просмотр автозапуска и фактическое устройство не совпадают
  • UIViewController.View.Window имеет значение null в методе ViewDidLoad
  • ОШИБКА ITMS-90474: «Недействительный пакет». Поддержка многозадачности iPad требует такой ориентации:
  • Как добавить фреймы libz.dylib и libxml2.dylib в аргументы gcc_flags в MonoTouch?
  • IOS: AOT раньше времени, что это?
  • Каков правильный способ получить папку библиотеки iOS с помощью Xamarin.iOS?
  • Интеграция сценария сборки Crashlytics с помощью Xamarin.iOS
  • «Путь .. приведет к файлу вне приложения Bundle и не может быть использован» Ошибка, mono touch / Xamarin
  • Студия xamarin для ios на окнах?
  • Monotouch: Получить xy или нажать UIView
  • Interesting Posts

    Цвет строки состояния в iOS 6?

    iOS 8 – Не удается получить текущее местоположение, Error Domain = kCLErrorDomain Code = 0

    Как добавить кнопку «Назад» в панель навигации через раскадровку?

    Парсер NSXMLParser: parseErrorOccurred: не вызывается на iOS 7

    Не удается показать основные данные в табличном представлении Swift

    iOS 8 Аутентификация Google+ trySilentAuthentication Fails

    Как определить архитектуру бинарного изображения во время выполнения?

    На iOS, как можно добиться гладкой анимации?

    UIView оживляет таймер

    Попытка извлечь ранее подключенное Bluetooth-устройство в приложение IOS не ответит сбой, если устройство выключено

    Возможно ли, чтобы вторичный вид автоматически изменялся в раскадровке, поскольку изменения «вид как» изменяются?

    Несколько столбцов для UITableView в iOS

    Как добавить карту входа в CredentialsProvider?

    UIDatePicker с UIToolbar

    iOS – CATiledLayer renderInContext: приводит к искажению изображения

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.