2013-10-12 4 views
0

Я создаю приложение .net, и я хотел бы сделать веб-звонки достаточно безопасными, чтобы его было нелегко контролировать трафик через что-то вроде скрипача. Я хотел бы знать, что сертификат с сервера не соответствует ожиданиям, а затем никогда не отправляет полный запрос с данными запроса.C#: проверить подлинность сертификата сервера перед отправкой HTTP GET/POST

Приложение iOS для Twitter делает это. Кто-то, я думаю, должен каким-то образом сделать копию сертификата https twitter и сделать сертификат этого скрипача. Я сам этого не делал, но я думаю, что так понимаю. То, что вы видите в скрипаче, заключается в том, что туннель был создан, но запрос не был задан. Тот же сценарий, когда у вас нет установленного на устройстве сертификата HTTPS скрипача, и вы открываете браузер для google.com/туннель создается, а затем браузер знает «uhoh untrusted server» и выводит сообщение пользователю. Я бы хотел сделать это более безопасным и разрешить только сертификат 1 сертификата/моего сервера.

Имеют смысл? Я думаю, что я понял, как это сделать, сделав отдельный полный фиктивный запрос /, но это не идеально.

ответ

3

Что вы спрашиваете: «Как мне применить сертификат pinning в моем клиентском приложении?»

Путь к этому должен заключаться в присоединении a validation callback к точке обслуживания, ответственной за выполнение ваших запросов HTTPS. Ваш обратный вызов проверки переопределит поведение по умолчанию («Принять любой сертификат, которому доверяет Windows») и вместо этого подтвердит, что полученный сертификат ТОЧНО тот, который вы ожидаете.

Теперь, прежде чем идти по этому пути, иметь в виду несколько вещей:

  1. Атакующий с правами администратора или Debug привилегий можно легко изменить свой код в памяти, чтобы удалить проверку. Это называется проблемой «Надежный клиент».
  2. Ваша проверка будет нарушена, если код когда-либо запускается в корпоративной среде, где устройство безопасности проводит проверку HTTPS (например, BlueCoat, ISA TMG и т. Д.)
  3. Ваша проверка предотвратит «проворность сертификата» - если сервер сертификат необходимо изменить, вам нужно будет обновить приложение. Если вы когда-либо захотите использовать сбалансированную по нагрузке конфигурацию с несколькими сертификатами или общедоступный HTNPS CDN, вам нужно будет обновить логику проверки.
+0

Большое спасибо! Я сразу же помету это. Вы случайно не знаете, есть ли аналогичный API для Windows Phone 8? – Quincy

+0

К сожалению, если этот точный вызов не работает в WP8, это говорит о том, что они не исправили недостаток, который присутствовал в WP7. См. Http://blogs.msdn.com/b/davidhardin/archive/2010/12/30/wp7-and-self-signed-ssl-certificates.aspx и http://connect.microsoft.com/VisualStudio/. Обратная связь/детали/368047/add-system-net-servicepointmanager-servercertificatevalidationcallback-property и http://stackoverflow.com/questions/5648506/how-to-ignore-certificate-errors-in-windows-phone-7 – EricLaw

Смежные вопросы