Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Objective-C/Cocoa: как я могу принять плохой сертификат сервера?
Используя NSURLRequest, я пытаюсь получить доступ к веб-сайту, у которого истек срок действия сертификата. Когда я отправляю запрос, мой метод делегата connection:didFailWithError вызывается со следующей информацией:
-1203, NSURLErrorDomain, bad server certificate
Мои поиски нашли только одно решение: скрытый метод класса в NSURLRequest:
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:myHost];
Однако я не хочу использовать private APIs в производственном приложении по очевидным причинам.
Есть какие-нибудь предложения по поводу того, что делать? Нужно ли мне использовать CFNetwork APIs, и если да, то два вопроса:
- Любой пример кода, который я могу использовать для начала работы? Я не нашел ни одного в интернете.
- Если я использую для этого CFNetwork, должен ли я полностью отказаться от NSURL?
EDIT:
iPhone OS 3.0 представил поддерживаемый метод для этого. Более подробно здесь: как использовать NSURLConnection для соединения с SSL для ненадежного сертификата?
Поддерживаемый способ сделать это требует использования CFNetwork. Вы должны сделать это прикрепить kCFStreamPropertySSLSettings к потоку, который указывает kCFStreamSSLValidatesCertificateChain == kCFBooleanFalse. Ниже приведен какой-то быстрый код, который делает это, минус проверка правильности результатов добавить очистку. После этого вы можете использовать CFReadStreamRead() для получения данных.
CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, CFSTR("http://www.apple.com"), NULL);
CFHTTPMessageRef myRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, CFSTR("GET"), myURL, kCFHTTPVersion1_1);
CFReadStreamRef myStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, myRequest);
CFMutableDictionaryRef myDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(myDict, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);
CFReadStreamSetProperty(myStream, kCFStreamPropertySSLSettings, myDict);
CFReadStreamOpen(myStream);
iPhone OS 3.0 представил поддерживаемый способ сделать это, который не требует более низкого уровня CFNetwork APIs. Подробнее здесь:
Как использовать NSURLConnection для соединения с SSL для ненадежного сертификата?
Я столкнулся с той же проблемой - я разрабатывал клиент SOAP, а сервер разработки имеет сертификат "homegrown". Я не смог решить эту проблему даже с помощью этого метода, так как я не использовал NSURL, но (плохо документированные и, по-видимому, заброшенные) методы WS, и решил на данный момент (внутренне) просто использовать соединение, не являющееся SSL.
Однако после этого возникает вопрос: если вы не хотите использовать private API в производственном приложении, следует ли вам разрешать доступ к сайту с сомнительным сертификатом?
Я процитирую Йенс Alfke :
Это не просто теоретическая проблема безопасности. Что-то
как и 25% из публичных DNS серверов были скомпрометированы, согласно
последние отчеты, и может направлять пользователей на сайты phishing/malware/ad даже
если они правильно вводят доменное имя. Единственное, что тебя защищает
из этого следует проверка сертификата SSL.
Можно ли создать самозаверяющий сертификат и добавить свой собственный центр сертификации в доверенный CAs? Я не совсем уверен, как это будет работать на iPhone,но я бы предположил, что на Mac OS X вы добавите их в брелок.
Вас также может заинтересовать этот пост Re: Как справиться с плохой ошибкой сертификата в NSURLDownload
Другой вариант-использовать альтернативную библиотеку соединений.
Я большой поклонник AsyncSocket, и он поддерживает самоподписанные сертификаты
http://code.google.com/p/cocoaasyncsocket/
Взгляните, я думаю, что он гораздо более надежен, чем стандартный NSURLRequests.