SSL-соединение с неподписанным сертификатом - PullRequest
2 голосов
/ 07 декабря 2011

Я столкнулся со следующей проблемой в приложении для iOS, которое мы разрабатываем.На моем сервере запущен WCF-сервис.Этот сервис работает в HTTPS.Я написал небольшую тестовую программу, чтобы посмотреть, смогу ли я подключиться к ней с другого компьютера:

ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;

Console.WriteLine("Press key to start webrequest");
Console.ReadKey();

WebRequest wr = WebRequest.Create("https://<serveraddress.here.com>");
Stream stream = wr.GetResponse().GetResponseStream();

Console.WriteLine(new StreamReader(stream).ReadToEnd());

Console.ReadKey();

Это работает, как ожидается, и возвращает html-код.Обратите внимание, что мы используем ServicePointManager.ServerCertificateValidationCallback, чтобы обеспечить доверие к сертификату в любом случае.

Тот же код в MonoTouch на iPhone, однако, возвращает следующую ошибку:

System.Net.WebException has been thrown
Error getting response stream (Write: BeginWrite failure): SendFailure
at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult)

Подключениена другой подписанный https сайт (например, PayPal) работает без проблем.Также подключение к серверу без https (обычный http) работает нормально.

Кажется, что он игнорирует ServerCertificateValidationCallback и где-то терпит неудачу.Есть ли способ исправить это?

1 Ответ

1 голос
/ 07 декабря 2011

SSL-соединение с неподписанным сертификатом

Я подозреваю, что вы используете самозаверяющий (не без знака ) сертификат, который вы сделали самостоятельно (например, makecert) для временного использования.

Как и другие говорили в комментариях, это должно работать, поскольку многие люди делают схожие вещи при разработке своих приложений.

Кажется, он игнорирует ServerCertificateValidationCallback и терпит неудачу в каком-то месте. Есть ли способ это исправить?

Mono (и MonoTouch) поддерживает как ServerCertificateValidationCallback, так и более старые ICertificatePolicy методы, позволяющие приложению иметь слово last при принятии (или отказе) сертификата X.509. Вы можете попробовать другой метод, но я не уверен, что это проблема.

Вы также можете сравнить свою (полную, а не частичную) трассировку стека с тем же кодом, где комментируется ServerCertificateValidationCallback. Если ошибка идентична , то, скорее всего, она связана с сертификатом, в противном случае это не так (есть намного больше, что может пойти не так с SSL / TLS; -)

К сожалению, я не могу оказать вам более конкретную помощь, потому что в вашем вопросе отсутствуют важные детали.

  • Какую версию MonoTouch вы используете?

  • Полная трассировка стека исключения MonoTouch дает вам? из части, которую вы дали, не на 100% ясно, что проблема возникает при проверке сертификатов.

  • Где / как вы выполняли свой пример кода? например это было на Mono или Microsoft .NET? какая версия?

Я предлагаю вам открыть отчет об ошибке на http://bugzilla.xamarin.com (и включить недостающие детали), поскольку вполне вероятно, что нам потребуется еще больше данных (например, wireshark журнал SSL коммуникации).

...