Вызов RESTful service с сертификатом клиента в Xamarin.Формы

#xamarin #https #cryptography #xamarin.forms #bouncycastle

#xamarin #https #криптография #xamarin.forms #bouncycastle

Вопрос:

Краткие сведения
Я пишу Xamarin.Формирует приложение, которое должно отправлять запросы к REST Api. Он должен использовать клиентский сертификат для установления двухстороннего ssl при взаимодействии с серверной частью.

Я бы хотел, чтобы все это было сделано в PCL, если это возможно.Каков наилучший способ сделать это?

Что у меня есть до сих пор
Xamarin.Формы не могут включать пакет System.Net.Security . Из-за этого я не могу использовать обычный HttpClient from System.Net.Http.HttpClient с клиентскими сертификатами. Поэтому мне нужен другой пакет криптографии и другой http-клиент, совместимый с этим пакетом.

Я нашел дистрибутив Bouncy Castle для C #, который, похоже, способен обрабатывать создание и управление клиентским сертификатом. Но я не нашел http-клиента, который действительно может использовать an Org.BouncyCastle.X509X509Certificate для настройки 2-стороннего SSL.

Редактировать Итак, кажется, что нет способа использовать клиентские сертификаты в общем коде (пожалуйста, просветите меня, если я ошибаюсь!). Мне придется использовать DependencyService для создания реализации библиотеки для iOS и Android, используя разные HTTP-стеки.

Комментарии:

1. AFAIK, ваше редактирование правильное, в PCL нет возможности использовать сертификат клиента

2. К сожалению, мы получили тот же ответ от разработчиков на Xamarin. Итак, мы рассмотрим 3 реализации для конкретной платформы, чтобы посмотреть, сколько времени это займет.

Ответ №1:

Я знаю, как вы относитесь к PCL. Я написал эту библиотеку, которая является стандартной библиотекой .NET, которая также предназначена для PCL, чтобы ее можно было использовать с формами Xamarin:

https://bitbucket.org/MelbourneDeveloper/restclient-.net/overview

Есть несколько примеров того, как запустить это с помощью Xamarin Forms. Что касается использования сертификата, как вы упомянули, я не уверен, что вам нужно делать что-то особенное, но я могу ошибаться. Если вы можете рассказать мне немного больше о том, что необходимо, в частности, для использования этого сертификата, я мог бы рассмотреть возможность добавления функциональности в библиотеку.