Оценка доверия сервера HTTPS
HTTPS является краеугольным камнем Защиты в сети Интернет. При создании соединения по HTTPS клиент должен оценить, доверять ли серверу. Если эта доверительная оценка перестала работать, клиент отказывается соединяться. Это может произойти по ряду причин, некоторые мягкие — сервер мог бы использовать самоподписанный сертификат, промежуточный сертификат отсутствует, и т.д. — и некоторые злонамеренные — сервер является самозванцем, смотря на кражу данные пользователя. Этот документ описывает причины, почему оценка доверия сервера может перестать работать, и как эта проблема может быть разрешена, не ставя под угрозу безопасность пользователя.
В то время как фокус этого документа находится на HTTPS, это также покрывает TLS, который является базовым протоколом системы защиты, используемым HTTPS и TLS's кузен старшего возраста, SSL.
Необходимо считать этот документ при создании iOS или программы Mac OS X, использующей HTTPS, TLS или SSL, чтобы говорить с сервером надежно, и необходимо разрешить отказ оценки доверия сервера или осуществить более строгую форму оценки доверия сервера.
Введение
Ваше первое обнаружение с оценкой доверия сервера HTTPS, вероятно, будет ошибкой как следующее:
Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “example.com” which could put your confidential information at risk." UserInfo=0x14a730 {NSErrorFailingURLStringKey=https://example.com/, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSErrorFailingURLKey=https://example.com/, NSLocalizedDescription=The certificate for this server is invalid. You might be connecting to a server that is pretending to be “example.com” which could put your confidential information at risk., NSUnderlyingError=0x14a6c0 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “example.com” which could put your confidential information at risk.", NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x14ec00>} |
По этой ошибке случая-1202 в NSURLErrorDomain домен NSURLErrorServerCertificateUntrusted, что означает, что оценка доверия сервера перестала работать. Вы могли бы также получить множество других ошибок; Приложение A: Общие Ошибки Оценки Доверия Сервера перечисляют наиболее распространенные.
Если Вы получаете одну из этих ошибок и ищете 'сеть справку, Вы могли бы найти уведомление как это:
To get around this problem simply disable the certificate checks. |
Или, хуже все же, как это:
To get around this problem disable the certificate checks by calling +[NSURLRequest setAllowsAnyHTTPSCertificate:forHost:]. |
Вслепую следование этому совету является серьезной ошибкой. HTTPS (фактически, базовый протокол TLS) предлагает две важных гарантии безопасности, и если Вы отключаете оценку доверия сервера, Вы полностью лишаете законной силы одну из этих гарантий.
В большинстве случаев лучший способ разрешить сервер полагает, что evalution отказ состоит в том, чтобы фиксировать сервер. Это обладает двумя преимуществами: это предлагает лучшую безопасность, и это сокращает объем кода, который необходимо записать. Остаток от этого technote описывает, как можно диагностировать отказы оценки доверия сервера и, если не возможно фиксировать сервер, как можно настроить оценку доверия сервера, чтобы позволить соединению продолжаться, полностью не подрывая безопасность пользователя.
Гарантии безопасности TLS
HTTPS определяется RFC 2818, но по большей части он состоит из простого состава двух существующих протоколов:
HTTP (как определено протоколом передачи гипертекста RFC 2616 - HTTP/1.1 и другие)
TLS (как определено RFC 5246 Версия протокола 1.2 Transport Layer Security (TLS) и другие), или более старый протокол SSL
HTTPS наследовал его гарантии безопасности от TLS. По умолчанию это:
на-проводном конфиденциальность — Это гарантирует, что данные безопасны от пассивного атакующего (кто-то, кто видит, но не может изменить пакеты, которыми обмениваются между клиентом и сервером).
аутентификация «клиент аутентифицирует сервер» — Это защищает клиент от активного атакующего (кто-то, кто может и видеть и изменить пакеты, которыми обмениваются между клиентом и сервером). Самое главное это защищает клиент от различных форм атаки «человек посередине», включая серверы самозванца (серверы, кто симулирует быть реальным сервером и таким образом получать конфиденциальную информацию от клиента).
Оценка доверия сервера TLS является частью TLS, что аутентификация реализаций «клиент аутентифицирует сервер». При отключении его Вы теряете эту вторую, чрезвычайно важную гарантию безопасности.
Разрешение отказов оценки доверия сервера
Если отключение оценки доверия сервера полностью является ошибкой, что необходимо сделать? Ваш первый шаг должен быть должен диагностировать проблему. Чтобы сделать это, считайте Отказы Оценки Доверия Сервера Понимания. Как только Вы понимаете проблему, Вы, вероятно, найдете, что самое простое решение состоит в том, чтобы фиксировать сервер. Это сокращает объем кода, который необходимо записать, и гарантирует безопасность пользователя.
Если не будет возможно фиксировать сервер, то необходимо будет настроить оценку доверия сервера, чтобы позволить соединению продолжаться, полностью не подрывая безопасность пользователя. Основная Доверительная Настройка объясняет общий процесс для настройки оценки доверия сервера; это сопровождается Доверительной Настройкой для Определенного APIs, объясняющего процесс для различного обычно используемого APIs. Наконец, Разрешение Определенных Отказов Оценки Доверия Сервера является обсуждением того, как работать вокруг определенных проблем оценки доверия сервера.
Можно также настроить оценку доверия сервера по противоположной причине, т.е. для создания соединения более безопасным. Посмотрите Осуществляющую Более строгую Оценку Доверия Сервера для обсуждения этого.
Понимание отказов оценки доверия сервера
Когда Вы соединяетесь с сервером с помощью TLS, он дает Вам сертификат о сервере и гарантирует, что сервер удерживает закрытую клавишу, соответствующую открытый ключ, встроенный в тот сертификат. Это - первый шаг в установлении безопасного соединения. Второй шаг, который так же критически важен, для Вас для исследования сертификата, который Вы получили от сервера, чтобы решить, соответствует ли это сервер, с которым Вы ожидаете говорить. Этот процесс известен как оценка доверия сервера, и этот раздел описывает основные включенные методы.
Доверительные основные принципы оценки
Оценка доверия сервера TLS состоит из двух основных шагов:
основной сертификат X.509 доверяет оценке
Специфичные для TLS дополнения
Для понимания первого шага необходимо знать немного о сертификатах X.509. Сертификат X.509 имеет пять критических атрибутов:
информация о предмете
информация об эмитенте
информация о самом сертификате (например, допустимый диапазон дат, который является диапазоном дат, для которых сертификат допустим),
Если цифровая подпись допустима тогда, сертификат является гарантией от эмитента, что предмет удерживает закрытую клавишу, связанную с открытым ключом в сертификате. Например, сертификат для DevForums (https://devforums.apple.com/) (во время записи) выпущен, Поручают, и путем подписания того сертификата Поручают, гарантирует, что специалисты по обслуживанию сервера DevForums удерживают закрытую клавишу, связанную с открытым ключом в сертификате.
Оценка доверия сертификата X.509 является рекурсивным двухступенчатым процессом:
проверьте законность самого сертификата — Это включает различные вещи, но самые важные два являются a), заверяющим цифровую подпись и b), проверяющий, что проверять дата (обычно текущая дата) в допустимом диапазоне дат сертификата.
проверьте законность эмитента — Это включает нахождение сертификата эмитента и (рекурсивно) проверку его законности.
Ясно этот рекурсивный процесс должен завершиться в конечном счете. Доверительная оценка может преуспеть только в одном случае: если это поражает доверяемую привязку. Доверяемая привязка является сертификатом, которому система слепо доверяет, обычно потому что это - корневой сертификат об известном центре сертификации, испекшемся в к системе.
С другой стороны, доверительная оценка может перестать работать по ряду причин:
если это поражает недопустимый сертификат
если это не может найти сертификат для эмитента
если это поражает самоподписанный сертификат, который не является доверяемой привязкой
Если оценка доверия X.509 успешна, система тогда применяет дополнительные специфичные для TLS проверки. На практике это включает проверку, что имя DNS, что Вы пытаетесь подключить к соответствиям имя DNS в сертификате. Существуют, однако, несколько морщин:
Обычно Вы ожидали бы находить это имя DNS в поле Common Name предмета, но это может также быть в Подчиненном Альтернативном расширении Имени. Если имя присутствует в Подчиненном Альтернативном расширении Имени, оно берет приоритет над Общим названием.
Подчиненное Альтернативное расширение Имени может также содержать IP-адреса, с которыми консультируется клиент, если оно соединилось через IP-адрес, а не имя DNS.
Имя DNS в сертификате могло бы быть подстановочным именем, например, «*.apple.com».
Расширенное Ключевое расширение Использования, как ожидают, будет включать значение Аутентификации сервера.
Если Вы интересуетесь подробными данными этих специфичных для TLS проверок, посмотрите RFC 2818.
Общие отказы
С вышеупомянутым в памяти, просто понять различные отказы оценки доверия сервера, которые Вы, вероятно, будете видеть. Они включают:
недостающий сертификат эмитента — Для любого данного сертификата (кроме доверяемой привязки), система должна быть в состоянии определить местоположение сертификата об эмитенте.
проблемы даты — Для любого данного сертификата, проверять дата должна быть в допустимом диапазоне дат сертификата.
самоподписанный сертификат — Для любого данного сертификата, если сертификат самоподписывается, он заставит оценку перестать работать (если это не будет доверяемая привязка).
никакая доверяемая привязка — система должна быть в состоянии следовать за путем сертификатов эмитента, приводящих к доверяемой привязке.
DNS называет несоответствие — имя DNS, с которым Вы пытаетесь соединиться, должен соответствовать имя в сертификате сервера, как описано в предыдущем разделе.
Если, после исследования каждой из точек выше, Вы все еще не можете разработать, почему оценка доверия сервера перестала работать, Вы могли бы хотеть попробовать метод, описанный в Исследовании Твердых к отладке Доверительных Отказов Оценки.
Средства отладки
Существует множество инструментов, которые можно использовать для отладки проблем оценки доверия сервера, и этот раздел обсуждает некоторые более общие.
Доступ цепочки для ключей
Доступ цепочки для ключей (в папке Utilities) имеет много полезных функций отладки сертификата:
Это может импортировать и экспортировать сертификаты и идентификационные данные во множестве форматов.
Если Вы дважды щелкнете по сертификату, то он выведет на экран хорошее средство просмотра сертификата GUI.
Ассистент Сертификата, к которому Вы получаете доступ через Доступ Цепочки для ключей, может оценить доверие на определенном сертификате.
Ассистент Сертификата может создать самоподписанные сертификаты.
Ассистент Сертификата может создать центр сертификации, который можно использовать для выпуска листа и промежуточных сертификатов для тестирования. Можно узнать больше об этой функции Ассистента Сертификата ниже.
При игре вокруг с Доступом Цепочки для ключей это - хорошая идея создать цепочку для ключей царапины, которую можно использовать для тестирования учетных данных. Это гарантирует, чтобы Ваши учетные данные тестирования не становились путавшими с важными учетными данными, которые Вы используете ежедневный.
Средства обеспечения безопасности
security инструмент на OS X предоставляет Вам доступ к широкому диапазону функциональности безопасности, не, весь из которого представлен через Доступ Цепочки для ключей. Например, можно использовать его для:
выведите цепочку для ключей в текстовом формате
работа с доверительными настройками подробно
добавьте сертификаты и удалите их из цепочки для ключей
Для получения дополнительной информации о security инструмент, считайте его страницу справочника.
Safari на Mac
При посещении веб-сайта HTTPS, которому доверяют, с Safari, можно щелкнуть по значку блокировки в строке заголовка для просмотра последовательности продвижения сертификатов от сертификата сервера до доверяемого корня.
При посещении недоверяемого веб-сайта HTTPS с Safari это выведет на экран его, «не может проверить идентификационные данные веб-сайта» лист. Кнопка Show Certificate расширит лист так, чтобы Вы видели, что рассматриваются сертификаты.
Оба из этих средств просмотра сертификата позволяют Вам вытащить сертификат рабочему столу (запустите свое перетаскивание на большом значке сертификата), который полезен, если необходимо проверить сертификат с другими инструментами (например, доверительная функция оценки Ассистента Сертификата).
Интерактивное тестирование
В некоторых случаях полезно соединиться с сервером, и выйти это управляет для тестирования. Для типичных Протоколов Интернета (HTTP, SMTP, NNTP, и т.д.) можно сделать это с инструментом telnet. Однако, если протокол использует TLS, это не работает. В этом случае Вашим наилучшим вариантом является s_client подкоманда openssl инструмента. Перечисление 1 показывает, как можно использовать этот инструмент для ручного получения содержания <https://www.apple.com> (помните, что HTTPS использует порт 443).
Перечисление 1 Используя openssl s_client
$ openssl s_client -connect www.apple.com:443 |
CONNECTED(00000003) |
[...] |
GET / HTTP/1.1 |
Host: www.apple.com |
HTTP/1.1 200 OK |
Server: Apache/2.2.3 (Oracle) |
Content-Length: 9464 |
Content-Type: text/html; charset=UTF-8 |
ntCoent-Length: 9516 |
Cache-Control: max-age=47 |
Expires: Mon, 25 Jun 2012 16:18:24 GMT |
Date: Mon, 25 Jun 2012 16:17:37 GMT |
Connection: keep-alive |
<!DOCTYPE html> |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> |
[...] |
</html> |
closed |
$ |
s_client подкоманда поддерживает много полезных параметров отладки. Например:
Можно предоставить
-certпараметр для имения его реагирует на клиентские запросы сертификата.Можно указать
-showcertsопция получить полный список сертификатов, предоставленных сервером.-debugи-msgопции включают низкоуровневые функции отладки.
См. страницу справочника для получения дополнительной информации об этих опциях и больше.
При исследовании странного поведения TLS, иногда полезно получить 'второе мнение' путем тестирования со штабелем OpenSSL TLS.
С другой стороны, некоторые проблемы являются определенными для Обеспечения Транспорта, так, чтобы успешный тест с
s_clientподкоманда не гарантирует, что будет работать код Вашего приложения.
Наконец, s_client подкоманда с -showcerts опция является хорошим способом получить копию цепочки сертификата сервера. Перечисление 2 является примером этого.
Перечисление 2 , Получающее полный список сертификатов
$ openssl s_client -showcerts -host www.apple.com -port 443 |
[...] |
--- |
Certificate chain |
0 s:/C=US/L=Cupertino/O=Apple Inc./ST=CALIFORNIA/CN=www.apple.com |
i:/C=US/O=Akamai Technologies Inc/CN=Akamai Subordinate CA 3 |
-----BEGIN CERTIFICATE----- |
MIIDJzCCApCgAwIBAgIOAQAAAAABNwl6mQWT01EwDQYJKoZIhvcNAQEFBQAwUTEL |
MAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAw |
HgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA1MDExNzUzNDNa |
Fw0xMzA1MDExNzUzNDNaMGMxCzAJBgNVBAYTAlVTMRIwEAYDVQQHEwlDdXBlcnRp |
bm8xEzARBgNVBAoTCkFwcGxlIEluYy4xEzARBgNVBAgTCkNBTElGT1JOSUExFjAU |
BgNVBAMTDXd3dy5hcHBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK |
AoIBAQCdJlExG8umAtxL9Df/10diaYoqFeeVDbU13cH0KNxq2vV0nSb3dROtUAig |
/wXj6jFU16fhfFegjcYBkYL9qiUkIiROMNo9r1IzZX4Yv9HT30vBdRMZkuIdy9eP |
m9nctNVYyBGRJapem1c+llxAJzToiuQofBY6L6K2dO7nuGm7AZ/PwcbyxZEWoh0E |
2SKMbMD9vG0Dph+rZDcPxENFa401j95ZiyyDinHXPliPVGimQmLeaWXMOhJSGXcd |
FidodxJCGPUIMuQnxipIH8EAiOg76aKsFvi/7ctoYtRGsXJZqRLnKJ2JVAq+tQxj |
6so8vaO5I5wqjyCa+ECJJ0i8Vhp/AgMBAAGjbDBqMDkGA1UdHwQyMDAwLqAsoCqG |
KGh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvQWthbWFpU3ViMy5jcmwwHQYDVR0O |
BBYEFK5QfqCwo5h4aWa7DmhIJdMZ50FjMA4GA1UdDwEB/wQEAwIFIDANBgkqhkiG |
9w0BAQUFAAOBgQCMfDikw5AwrCCCkhcb+ak5oTRmhV88mL5Pk7SzVTbMdCoaktOD |
+Bu7iX0OYsISOjYu0x2CzX2VQ5kP5NhA7fqXOiq4iG1G/Ae+xW01lUB1gJ7VUwoX |
9LabdT6c812EOMpza4lrnLqnOsiSCDf1SWv0Lo+pMkZ9Ka9EbSd3DqUEHw== |
-----END CERTIFICATE----- |
1 s:/C=US/O=Akamai Technologies Inc/CN=Akamai Subordinate CA 3 |
i:/C=US/O=GTE Corporation/OU=GTE CyberTrust Solutions, Inc./CN=GTE CyberTrust Global Root |
-----BEGIN CERTIFICATE----- |
MIIDxzCCAzCgAwIBAgIEBAAEAzANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV |
[...] |
bZ14M6VWhKYouKEZnaAsSCe+XHsF0haUfOnxpj4p7CZj/DnGZVB8Uh92ORa0lyY5 |
q44d/bV6wDodO38= |
-----END CERTIFICATE----- |
--- |
[...] |
Можно исследовать один из этих сертификатов:
копирование текста (
-----BEGIN CERTIFICATE-----строка через к-----END CERTIFICATE-----строка) в текстовый файл с .pem расширениемперетаскивание того файла в Доступ Цепочки для ключей
двойной щелчок по недавно импортированному сертификату
Это откроет стандартное средство просмотра сертификата, которое можно использовать для исследования сертификата подробно.
Дамп ASN.1
Много технологий безопасности, включая сертификаты, используют формат двоичных данных ASN.1. Этот формат даже не удаленно человекочитаем, но существуют инструменты, которые могут помочь. Прежде всего dumpasn1 инструмент командной строки может преобразовать файл, содержащий двоичных данных ASN.1 к текстовому формату ASN.1, делая намного проще понять.
Основная доверительная настройка
iOS и OS X поддерживают доверительную оценку посредством доверительных объектов (типа SecTrustRef). Возможно создать доверительные объекты с нуля, но в случае оценки доверия сервера TLS обычно имеет место, что API, который Вы используете уже, делает некоторую оценку доверия сервера по умолчанию, и Вы хотите настроить это. Таким образом стандартный подход:
получите доверительный объект
оцените его сами, только чтобы быть уверенными, что это - причина отказа
если доверительная оценка успешно выполняется, можно принять решение осуществить более строгие доверительные правила оценки, как обсуждено в Осуществлении Более строгой Оценки Доверия Сервера
если доверительная оценка перестала работать, примените свои настройки к доверительному объекту
оцените доверие снова, и или позвольте или отклоните соединение на основе этой оценки
Механизмом, используемым для получения доверительного объекта, является определенный API. Доверительная Настройка для Определенного APIs обсуждает общие падежи. Однако, как только у Вас есть доверительный объект, процесс оценки и настройки его является тем же для всего APIs.
Перечисление 3 показывает основной метод для оценки доверительного объекта.
Перечисление 3 Оценивая доверительный объект
OSStatus err; |
BOOL allowConnection; |
SecTrustResultType trustResult; |
allowConnection = NO; |
err = SecTrustEvaluate(trust, &trustResult); |
if (err == noErr) { |
allowConnection = (trustResult == kSecTrustResultProceed) || |
(trustResult == kSecTrustResultUnspecified); |
} |
Можно тогда настроить оценку доверия сервера, как Вы считаете целесообразным. Например, если Вы говорите с сервером, сертификат которого был выпущен центром сертификации, этому не доверяет система, можно вызвать SecTrustSetAnchorCertificates установить привязки для доверительного объекта быть что корневой сертификат центра сертификации. Перечисление 4 показывает пример этого.
Перечисление 4 Используя пользовательскую привязку
OSStatus err; |
BOOL allowConnection; |
SecCertificateRef customAnchor; |
SecTrustResultType trustResult; |
allowConnection = NO; |
customAnchor = ... the CA's root certificate ...; |
err = SecTrustSetAnchorCertificates( |
trust, |
(__bridge CFArrayRef) [NSArray arrayWithObject:(__bridge id) customAnchor] |
); |
if (err == noErr) { |
err = SecTrustEvaluate(trust, &trustResult); |
} |
if (err == noErr) { |
allowConnection = (trustResult == kSecTrustResultProceed) || |
(trustResult == kSecTrustResultUnspecified); |
} |
code |
Наконец, могут быть ситуации, где требуемая настройка не может быть сделана непосредственно на доверительном объекте. Например, если Вы хотите доверительный объект рассмотреть дополнительный промежуточный сертификат, Вы не можете добавить что сертификат непосредственно объекту (r. 16058372). Можно, однако, воссоздать доверительный объект с параметрами, Вы хотите и затем оцениваете тот новый доверительный объект. Перечисление 5 показывает пример этого.
Перечисление 5 , Воссоздающее доверительный объект
OSStatus err; |
BOOL allowConnection; |
CFArrayRef policies; |
NSMutableArray * certificates; |
CFIndex certCount; |
CFIndex certIndex; |
SecCertificateRef extraIntermediate; |
SecTrustRef newTrust; |
SecTrustResultType newTrustResult; |
allowConnection = NO; |
policies = NULL; |
newTrust = NULL; |
err = SecTrustCopyPolicies(trust, &policies); |
if (err == errSecSuccess) { |
certificates = [NSMutableArray array]; |
certCount = SecTrustGetCertificateCount(trust); |
for (certIndex = 0; certIndex < certCount; certIndex++) { |
SecCertificateRef thisCertificate; |
thisCertificate = SecTrustGetCertificateAtIndex(trust, certIndex); |
[certificates addObject:(__bridge id)thisCertificate]; |
} |
extraIntermediate = ... the extra intermediate certificate to use ...; |
[certificates addObject:(__bridge id)extraIntermediate]; |
err = SecTrustCreateWithCertificates( |
(__bridge CFArrayRef) certificates, |
policies, |
&newTrust |
); |
if (err == noErr) { |
err = SecTrustEvaluate(newTrust, &newTrustResult); |
} |
if (err == noErr) { |
allowConnection = (newTrustResult == kSecTrustResultProceed) || |
(newTrustResult == kSecTrustResultUnspecified); |
} |
} |
if (newTrust != NULL) { |
CFRelease(newTrust); |
} |
if (policies != NULL) { |
CFRelease(policies); |
} |
Доверительная настройка для определенного APIs
Как только Вы понимаете основы использования доверительного объекта, необходимо знать, как получить такой объект от API, который Вы используете. Следующие разделы покрывают множество APIs от очень высокого уровня (веб-представление и UIWebView) к самому низкому уровню (Безопасный Транспорт).
Веб-представление
Веб-представление OS X предоставляет Вам доступ к запросам аутентификации NSURLConnection через resourceLoadDelegate свойство. Можно реагировать на запросы аутентификации таким же образом, что Вы были бы с NSURLConnection. Увы, это не возможно к доступу NSURLAuthenticationMethodServerTrust запросы аутентификации через этот механизм (r. 9475067). Можно работать вокруг этого ограничения с помощью подкласса NSURLProtocol, как проиллюстрировано Примером кода 'CustomHTTPProtocol'.
UIWebView
UIWebView не обеспечивает пути к приложению для настройки его оценок доверия сервера HTTPS (r. 10131336). Можно работать вокруг этого ограничения с помощью подкласса NSURLProtocol, как проиллюстрировано Примером кода 'CustomHTTPProtocol'.
HTTP живая потоковая передача
HTTP поддержка Живой Потоковой передачи оценки доверия сервера зависит от типа выбираемого ресурса, как показано в Таблице 1.
Тип ресурса | Расширение | Может настроить оценку доверия сервера? |
|---|---|---|
участок среды | .ts | нет |
индекс (список воспроизведения) | .m3u8 | да |
ключ | n/a | да |
Для получения общей информации о HTTP Живая Потоковая передача, посмотрите, что HTTP Живет, Передавая Обзор потоком. Для определенной информации о том, как заставить HTTP Живая Потоковая передача вызывать Ваш код для выборки ключей — в которой точке можно использовать любой метод, Вы хотите получить доступ к ним, включая NSURLSession со специализированной оценкой доверия сервера HTTPS — наблюдают Сеанс 2011 года WWDC 408 HTTP Живое Обновление Потоковой передачи.
Кроме того, Основа AV позволяет Вам реализовывать свою собственную загрузку ресурса, при которой точке можно использовать любую сеть API, чтобы загрузить эти ресурсы (и таким образом настроить оценку доверия сервера HTTPS с помощью того API). В частности можно установить загрузчик ресурса (AVAssetResourceLoader) на активе (AVAsset) и затем использовать его делегата для переопределения загрузки ресурсов неучастка среды (см. Таблицу 1). Поддержка этого метода была представлена в iOS 6.0 и OS X 10.9.
NSURLSession
NSURLSession позволяет Вам настраивать оценку доверия сервера HTTPS путем реализации -URLSession:didReceiveChallenge:completionHandler: метод делегата. Для настройки оценки доверия сервера HTTPS ищите проблему, пространство защиты которой имеет метод аутентификации NSURLAuthenticationMethodServerTrust. Для тех проблем разрешите их, как описано ниже. Для других проблем те, что Вы не заботитесь о, вызывают блок обработчика завершения с NSURLSessionAuthChallengePerformDefaultHandling расположение и учетные данные NULL.
При контакте с NSURLAuthenticationMethodServerTrust запрос аутентификации, можно получить доверительный объект от пространства защиты проблемы путем вызова -serverTrust метод. После использования доверительного объекта сделать Ваш собственный сервер HTTPS доверяет оценке, необходимо разрешить проблему одним из двух способов:
Если Вы хотите отклонить соединение, вызовите блок обработчика завершения с
NSURLSessionAuthChallengeCancelAuthenticationChallengeрасположение и учетные данные NULL.Если Вы хотите позволить соединение, создайте учетные данные из своего доверительного объекта (использование
+[NSURLCredential credentialForTrust:]) и вызовите блок обработчика завершения с теми учетными данными иNSURLSessionAuthChallengeUseCredentialрасположение.
NSURLConnection
NSURLConnection позволяет Вам настраивать оценку доверия сервера HTTPS почти таким же способом как NSURLSession. Существует два существенных различий:
Вы реализуете различный метод делегата (в этом случае
-connection:willSendRequestForAuthenticationChallenge:).При разрешении проблемы необходимо получить отправителя от проблемы (через
-senderметод), и затем вызывают надлежащий метод на том отправителе:для проблем, о которых Вы не заботитесь, вызвать
-performDefaultHandlingForAuthenticationChallenge:если Вы хотите отклонить соединение, вызвать
-cancelAuthenticationChallenge:если Вы хотите позволить соединение, вызвать
-useCredential:forAuthenticationChallenge:, передача в учетных данных, создаваемых с доверительным объектом, как описано в NSURLSession
CFHTTPStream
Можно настроить оценку доверия сервера HTTPS для CFHTTPStream таким же образом, Вы делаете для CFSocketStream (см. следующий раздел). Существует, однако, один серьезный глюк: к тому времени, когда Вы имеете возможность приводить доверительный объект в порядок применить Вашу пользовательскую доверительную оценку, CFHTTPStream уже отправил Ваш Запрос HTTP в сервер. Таким образом, если Запрос HTTP является потенциально конфиденциальным, этот метод не является надлежащим. В этом случае необходимо или повысить уровень, и использовать NSURLSession, или вниз уровень, и использовать CFSocketStream непосредственно.
CFSocketStream
Для настройки сервера TLS доверяют оценке для CFSocketStream, необходимо сделать следующее:
используйте
kCFStreamSSLValidatesCertificateChainзаписьkCFStreamPropertySSLSettingsсвойство для отключения сервера доверяет оценке полностьюкак только поток соединился, но прежде чем Вы будете отправлять любые данные или будете доверять любым данным, Вы получаете, получаете доверительный объект от потока через
kCFStreamPropertySSLPeerTrustсвойствоиспользуйте, которые доверяют объект реализовать безотносительно пользовательской оценки доверия сервера, которой Вы желаете
или продолжите соединение или закройте его, в зависимости от своей оценки доверия сервера
Основной глюк здесь имеет отношение к шагу 2: когда соединяется поток? Оказывается, что доверительный объект не доступен в то время, когда Вы получаете поток открыто завершенное событие. Чтобы гарантировать, что доверительный объект доступен, необходимо ожидать, имеет пространство, доступное событие или имеет байты доступное событие. Посмотрите Таблицу 2 для подробных данных.
Событие NSStream | Событие CFStream | Доверительный объект? |
|---|---|---|
NSStreamEventOpenCompleted | kCFStreamEventOpenCompleted | не доступный |
NSStreamEventHasSpaceAvailable | kCFStreamEventCanAcceptBytes | доступный |
NSStreamEventHasBytesAvailable | kCFStreamEventHasBytesAvailable | доступный |
Безопасный транспорт
Безопасный Транспорт является самым низким уровнем реализация TLS и на OS X и на iOS и, как Вы могли бы ожидать, это имеет хорошую поддержку пользовательской оценки доверия сервера TLS. Процедура следующие:
прежде, чем запустить соединение, вызвать
SSLSetSessionOptionустановитьkSSLSessionOptionBreakOnServerAuthпри необходимости, как обсуждено ниже, вызов
SSLSetEnableCertVerifyдля отключения сервера по умолчанию доверяют оценкевыполните Безопасное Транспортное квитирование согласно обычному
когда
SSLHandshakeвозвратыerrSSLServerAuthCompleted, вызватьSSLCopyPeerTrustполучить доверительный объект для соединенияиспользуйте, которые доверяют объект реализовать безотносительно пользовательской оценки доверия сервера, которой Вы желаете
или продолжайте Безопасное Транспортное квитирование или закройте соединение
Разрешение определенных отказов оценки доверия сервера
Предыдущие разделы обсудили тип отказов оценки доверия сервера, которые могли бы произойти, как Вы используете доверительный объект реализовать Вашу собственную оценку доверия сервера, и как Вы получаете доверительный объект от наиболее часто использование APIs. Этот раздел показывает, как совмещаются все эти части: то, как можно использовать методы, описало ранее для разрешения определенных отказов оценки доверия сервера при тихом поддержании определенной степени безопасности.
Объем этого обсуждения предполагает, что Вы встретились, сервер доверяют отказу оценки один определенный сервер или малочисленной, хорошо охарактеризованной группе серверов. При создании программы общего назначения, та, которая могла бы соединиться с широким диапазоном серверов, как указано пользователем, необходимо пропустить вперед для Доверия Исключениям.
Перед тем, чтобы читать остальную часть этого раздела существует две вещи иметь в виду:
Безусловно самый простой и самый безопасный способ разрешить отказы оценки доверия сервера состоит в том, чтобы фиксировать сервер. Необходимо только считать методы описанными в этом разделе, если не возможно решить проблему в источнике.
У большинства пользователей нет навыков необходимыми для принятия образованных решений о вопросах безопасности. Предоставлять пользователю с предупреждением, спрашивающим, позволить ли соединение, является почти всегда ошибкой с точки зрения безопасности; вероятно, что пользователь выберет любую опцию, работающую, независимо от того, насколько небезопасный это.
Отказы имени сервера
Если сервер доверяет сбоям оценки, потому что имя DNS сервера не соответствует имя DNS в сертификате, можно работать вокруг отказа путем переопределения имени DNS в доверительном объекте. Чтобы сделать это, вызвать SecPolicyCreateSSL создать новый объект политики с корректным именем сервера и затем вызвать SecTrustSetPolicies применять его к доверительному объекту.
Недостающие промежуточные сертификаты
Существует много способов, которыми можно разрешить отказ оценки доверия сервера, вызванный недостающим промежуточным сертификатом:
Лучший подход, как всегда, для фиксации сервера. TLS требует, чтобы сервер предоставил клиенту все продвижение сертификатов от сертификата сервера до доверяемого сертификата привязки, включая любые промежуточные сертификаты (см. Раздел 7.4.2 из RFC 5246). Во многих случаях отсутствие промежуточного сертификата является просто незначительным контролем, который может быстро исправить администратор сервера.
На OS X, если Ваша программа (или пользователь) добавляет промежуточный сертификат какой-либо цепочке для ключей в списке поиска цепочки для ключей, доверительный объект будет использовать его автоматически.
На iOS, если Ваше приложение добавляет промежуточный сертификат своей цепочке для ключей, доверительный объект будет использовать его автоматически.
Если все остальное перестало работать, Ваша программа может получить промежуточный сертификат (свяжите его программой или загрузите его с Интернета), и затем создайте новый доверительный объект, включающий объединение сертификатов от существующего доверительного объекта и Вашего дополнительного промежуточного сертификата. См. Перечисление 5 для примера этого.
Доверие одному определенному сертификату
В некоторых случаях полезно обработать сертификат как простой маркер идентификационных данных. Например, в одноранговой программе, оценка доверия X.509 бессмысленна, потому что нет никакой центральной власти к свидетельствам о выпуске. Однако можно все еще использовать TLS для безопасной передачи в той архитектуре. Процедура следующие:
получите копию сертификата удаленного узла через доверяемый канал Вашей собственной разработки; у Вас мог быть удаленный пользователь, посылают Вам по электронной почте их сертификат, помещают его на карту с интерфейсом USB, или безотносительно
доберитесь сертификат сервера от доверительного объекта (передайте индекс 0 к
SecTrustGetCertificateAtIndex)получите данные для того сертификата сервера (
SecCertificateCopyData)сравните это с данными сертификата, Вы вошли в шаг 1; если они соответствуют, Вы говорите с корректной коллегой
Пользовательский центр сертификации
Если сертификат Вашего сервера выпущен центром сертификации, которому не доверяет система по умолчанию, можно разрешить получающийся отказ оценки доверия сервера включением корневого сертификата центра сертификации в программе. Процедура следующие:
включайте копию корневого сертификата центра сертификации в Вашей программе
как только Вы имеете доверительный объект, создаете объект сертификата из данных сертификата (
SecCertificateCreateWithData) и затем набор, что сертификат как доверяемая привязка для доверительного объекта (SecTrustSetAnchorCertificates)SecTrustSetAnchorCertificatesустанавливает флаг, препятствующий доверительному объекту доверять любым другим привязкам; если Вы также хотите доверять системным привязкам по умолчанию, вызватьSecTrustSetAnchorCertificatesOnlyочистить тот флагоцените доверительный объект согласно обычному
Самоподписанные сертификаты
Контакт с самоподписанными сертификатами проблематичен, потому что существует множество различных причин, почему люди используют самоподписанный сертификат. Этот раздел покрывает наиболее распространенные случаи.
Разработка
Во время разработки самоподписанный сертификат упрощает устанавливать основанный на TLS сервер для тестирования. Это - совершенно разумное использование самоподписанных сертификатов и совершенно уважительная причина для того, чтобы полностью запретить оценку доверия сервера TLS.
В то время как самоподписанный сертификат является разумным подходом во время разработки, существует лучший путь: создайте свой собственный центр сертификации (см. ниже), и имейте его, выпускают сертификат для Вашего тестового сервера. Вы можете тогда любой, какой a) соединил корневой сертификат Вашего центра сертификации проводами в Ваше приложение (как объяснено в Пользовательском Центре сертификации), или b) имеют каждую Вашу установку тестеров корневой сертификат Вашего центра сертификации через стандартный интерфейс пользователя системы (Safari, Почта и профили конфигурации на iOS, Доступ Цепочки для ключей на OS X). Этот подход имеет преимущество, что Вы не должны отключать оценку доверия сервера во время разработки, что означает, что Вы не можете забыть повторно включать его при поставке производственной сборки.
Ассистент сертификата — Это приложение встроено к OS X и поддерживает довольно хороший пользовательский интерфейс для управления Вашим собственным центром сертификации; TN2326 Технического примечания, 'Создавая Сертификаты для Тестирования TLS' имеет подробные инструкции о том, как использовать его.
OpenSSL — Утилита командной строки OpenSSL позволяет Вам создать и управлять своим собственным центром сертификации. Это довольно сложно (см. страницу справочника для подробных данных), но существует много учебных руководств там в Интернете.
Бизнес-причины
Некоторые организации используют самоподписанный сертификат для производственной инфраструктуры из-за бизнес-причин. Возможно, организация не желает купить сертификат у доверенного центра сертификации (несмотря на то, что такие сертификаты не являются дорогими каким-либо образом). Или возможно организация может получить такой сертификат, но существует много включенного бюрократизма.
Очевидное решение здесь состоит в том, чтобы решить бизнес-вопрос и идти дальше. Однако это не всегда возможно. В этом случае самоподписанный сертификат является опцией, но это может не быть наилучший вариант. В большинстве случаев лучше использовать Ваш собственный центр сертификации, любой просто в целях разработки (см. Разработку), или также в производстве также (см. примечание выше). Используя Ваш собственный центр сертификации имеет много преимуществ перед самоподписанным сертификатом:
изменения сервера — Если сервер изменяется таким способом, повреждающим оценку доверия сервера, Ваш центр сертификации, могут выпустить новый сертификат, описывающий новое состояние сервера, и клиенты будут автоматически доверять ему. Например, если необходимо изменить имя DNS сервера, новый сертификат может содержать новое имя DNS.
переиздание — Если сертификат сервера истекает, Ваш центр сертификации, может переиздать его.
аннулирование — Ваш центр сертификации может поддерживать аннулирование сертификата, или через OCSP или через CRL.
Сторонний сервер
Предыдущие разделы обсудили причины, почему Ваша организация должна избежать самоподписанных сертификатов. Однако, что происходит, если Ваша программа связывается с сервером из Вашего управления, и это имеет самоподписанный сертификат? Лучшее решение здесь состоит в том, чтобы работать с поставщиком сервера, чтобы заставить их перемещаться в сертификат, выпущенный доверенным центром сертификации. Если это не возможно, следующий наилучший вариант состоит в том, чтобы встроить сертификат сервера в Ваше приложение и затем использовать подход, описанный в Доверении Одного Определенного Сертификата для доверия просто тому сертификату.
Доверительные исключения
Объем этого technote предполагает, что Вы пытаетесь разрешить, что сервер доверяет отказу оценки определенный сервер. Но что происходит, если Вы создаете приложение общего назначения, то, которое может соединиться с большим разнообразием серверов? Каноническим примером этого является веб-браузер, но там многие другие (почтовые программы, RSS-ридеры, и т.д.). В этом случае Вы не можете применить определенное решение; Вам нужно решение, работающее в целом.
Лучший подход общего назначения ничего не должен делать. Оценка доверия сервера по умолчанию имеет два критических преимущества:
просто реализовать
это безопасно
Последняя точка критически важна: если будет отказ оценки доверия сервера, и Вы предоставляете пользователю способ обойти безопасность, то пользователь будет почти всегда выбирать любую опцию, работающую, независимо от того насколько небезопасный это. С точки зрения безопасности лучше просто привести к сбою, и затем иметь пользовательское давление администратор сервера в фиксацию их сервера.
Если Вы принимаете решение проигнорировать это уведомление (и Вы не будете одними; много популярных приложений общего назначения дарят пользователю вопросы о безопасности, несмотря на то, что у них нет навыков для ответа обоснованно), можно все еще предпринять шаги для минимизации риска.
Общая стратегия здесь:
попытайтесь соединиться с сервером
если это перестало работать с отказом оценки доверия сервера, сообщите пользователю о проблеме (см. Сертификаты Отображения и Отображение Доверительных Результатов для подробных данных),
если пользователь решает соединиться так или иначе, помните, что решение и продолжает соединение
позже, если Вы встречаетесь с тем же отказом оценки доверия сервера, игнорируете проблему и подключение так или иначе
Хитрая часть является шагом 4. Как можно сказать, что это - тот же отказ? Если Вы понимаете это превратно, Вы рискуете ставить под угрозу безопасность пользователя выше и вне того, на что они согласились. Рассмотрите следующую последовательность:
пользователь соединяется с сервером с сертификатом с истекшим сроком
Ваша программа обнаруживает это и просит, чтобы пользователь подтвердил, что они действительно хотят соединиться
пользователь соглашается, таким образом, Ваша программа помнит что решение и подключения к серверу
позже пользователь перемещается во враждебную сеть, та, включающая активного атакующего, реализующего сервер самозванца; они идут для соединения с сервером снова
Ваша программа соединяется с сервером самозванца; это обнаруживает отказ оценки доверия сервера, который хорош, но это видит, что пользователь согласился соединиться с сервером несмотря на такие проблемы и подключениями так или иначе
Проблема здесь состоит в том, что Ваша программа теперь соединилась с сервером самозванца, даже при том, что пользователь только согласился проигнорировать сертификат с истекшим сроком.
Можно решить эту проблему с помощью доверительных исключений. Когда пользователь соглашается соединиться с сервером, Ваша программа может попросить у доверительного объекта доверительного исключения (SecTrustCopyExceptions). Это записывает информацию, необходимую для обхождения текущего доверительного отказа оценки. В будущем, когда Ваша программа видит доверительный отказ оценки для того же сервера, она может применить исключение к доверительному объекту (SecTrustSetExceptions). Если это разрешает отказ оценки доверия сервера, он может безопасно продолжить соединение. В противном случае это должно попросить, чтобы пользователь согласился на дополнительное доверительное исключение.
Осуществление более строгой оценки доверия сервера
Настройка оценки доверия сервера примерно не работает вокруг проблем; можно также использовать его для создания безопасности более трудной. Если Вы работаете над программой высокой безопасности, Вы могли бы хотеть пойти вне оценки доверия сервера по умолчанию и добавить еще некоторые собственные проверки.
Например, Вы могли бы хотеть к не, только проверяют, что сертификат сервера был выпущен доверенным центром сертификации, но что он был выпущен определенным центром сертификации (метод, известный как прикрепление центра сертификации). Просто выполнить это использование доверительного объекта. Процедура следующие:
включайте копию корневого сертификата центра сертификации в Вашей программе
как только Вы имеете доверительный объект, создаете объект сертификата из данных сертификата (
SecCertificateCreateWithData) и затем набор, что сертификат как единственная доверяемая привязка для доверительного объекта (SecTrustSetAnchorCertificates)оцените доверительный объект; если оценка успешно выполняется, Вы знаете, что сертификат сервера допустим и был выпущен центром сертификации, который Вы указали
Прикрепление центра сертификации является всего одним примером того, как можно осуществить более строгую оценку доверия сервера. Существует много других проверок, которые Вы могли бы рассмотреть. Например:
Можно реализовать закрепление сертификата путем извлечения открытого ключа из использования сертификата сервера
SecTrustCopyPublicKey.Вы могли проверить на присутствие определенных значений атрибута или расширения в сертификате; на OS X
SecCertificateCopyValuesподпрограмма может быть очень полезной при реализации таких проверок.SecTrustCopyResultпозволяет Вам определить, была ли расширенная проверка сделана как часть доверительной оценки.SecPolicyCreateRevocationпозволяет Вам создать политику безопасности, в частности проверяющую на аннулирование сертификата (например, через OCSP или CRL).
Полезные советы
В этом разделе описываются некоторые общие полезные советы при контакте с настройкой оценки доверия сервера.
SecTrustEvaluate может блокировать
Существует две ситуации где SecTrustEvaluate возможно, должен получить доступ к сети для завершения ее задания:
при загрузке промежуточных сертификатов
при определении, был ли сертификат отменен (через OCSP или CRL)
Эти сетевые операции имеют относительно короткие тайм-ауты, но они все еще делают SecTrustEvaluate неподходящий для использования на основном потоке, особенно на iOS. Если необходимо вызвать SecTrustEvaluate от основного потока у Вас есть три опции:
можно использовать
SecTrustEvaluateAsync(представленный в OS X 10.7 и iOS 7.0)можно использовать
SecTrustSetNetworkFetchAllowedотключить доступ к сети для Вашего доверительного объекта (представленный в OS X 10.9 и iOS 7.0)можно использовать примитивный параллелизм (например, GCD, NSOperation или поток) для выполнения
SecTrustEvaluateна вторичном потоке
Исследование трудно к отладке доверяет отказам оценки
Иногда трудно разработать точно, почему доверительная оценка перестала работать. Ваш первый шаг должен всегда быть должен работать через точки, описанные в Общих отказах. Если Вы все еще не можете выяснить проблему, существует еще несколько приемов, которые можно попробовать:
распечатайте результат
SecTrustCopyResultраспечатайте результат
SecTrustCopyPropertiesисследуйте доверительные данные исключения (как возвращено
SecTrustCopyExceptions)
Первым двум точкам не нужно никакое дальнейшее объяснение. Последняя точка немного хитра. Если Вы посмотрите в данных, то Вы будете видеть, что это - фактически двоичный список свойств. Если Вы сохраняете данные к файлу с .plist расширение и затем открывает его с XCode (или Ваш любимый редактор списка свойств), можно найти полезные подсказки относительно того, почему доверительная оценка перестала работать.
Отображение сертификатов
При некоторых обстоятельствах может быть полезно вывести на экран сертификаты пользователю. Например, опытный пользователь мог бы хотеть вручную подтвердить идентификационные данные сервера, с которым связывается Ваше приложение. OS X имеет высокоуровневый APIs для этого:
SFCertificateView является подклассом NSView, выводящим на экран сертификат
SFCertificatePanel является панелью, выводящей на экран один или несколько сертификатов; это может использоваться независимо или в качестве листа
В целом необходимо использовать этот высокоуровневый APIs, но, если Вы хотите вывести на экран свой собственный пользовательский интерфейс, можно использовать низкоуровневый APIs (в частности, SecCertificateCopyValues) извлечь подробные данные из сертификата и создать Ваш собственный UI из этого.
iOS не имеет высокоуровневого API для отображения сертификатов. Если Вы хотите сделать это, необходимо будет создать собственный пользовательский интерфейс. Выполнение, которое нетривиально, потому что iOS только ограничил APIs для того, чтобы получить информацию из сертификата (r. 11004183); фактически, единственная вещь, которую можно сделать, получают видимое пользователем имя для сертификата путем вызова SecCertificateCopySubjectSummary. Кроме того, Вам будет нужен Ваш собственный код для парсинга сертификата.
Отображение доверительных результатов
Уведомление, данное всюду по этому документу, состоит в том, что Вы не должны задавать пользовательские вопросы безопасности, на которые они не квалифицированы для ответа. При игнорировании того уведомления тогда, Вы, вероятно, захотите способ вывести на экран результаты неработающего, доверяют оценку пользователю. OS X имеет высокоуровневый API для этого, SFCertificateTrustPanel.
На iOS нет никакого эквивалентного высокоуровневого API, но обе платформы позволяют Вам получать подробную информацию о доверительных отказах оценки. Можно вызвать SecTrustCopyResult, который возвращает информацию о полной доверительной оценке, и SecTrustCopyProperties, который возвращает информацию о каждом сертификате в продвижении пути от сертификата сервера до доверяемой привязки. Можно использовать эту информацию для заполнения собственных доверительных результатов UI.
Приложение A: общие ошибки оценки доверия сервера
Таблица 3 перечисляет некоторые ошибки, которые Вы, вероятно, возвратите перед лицом отказов оценки доверия сервера.
Ошибочный домен | Код ошибки | Значение кода ошибки |
|---|---|---|
NSURLErrorDomain | NSURLErrorSecureConnectionFailed | - 1200 |
NSURLErrorDomain | NSURLErrorServerCertificateHasBadDate | - 1201 |
NSURLErrorDomain | NSURLErrorServerCertificateUntrusted | - 1202 |
NSURLErrorDomain | NSURLErrorServerCertificateHasUnknownRoot | - 1203 |
NSURLErrorDomain | NSURLErrorServerCertificateNotYetValid | - 1204 |
kCFErrorDomainCFNetwork | kCFURLErrorSecureConnectionFailed | - 1200 |
kCFErrorDomainCFNetwork | kCFURLErrorServerCertificateHasBadDate | - 1201 |
kCFErrorDomainCFNetwork | kCFURLErrorServerCertificateUntrusted | - 1202 |
kCFErrorDomainCFNetwork | kCFURLErrorServerCertificateHasUnknownRoot | - 1203 |
kCFErrorDomainCFNetwork | kCFURLErrorServerCertificateNotYetValid | - 1204 |
NSOSStatusErrorDomain | errSSLXCertChainInvalid | - 9807 |
NSOSStatusErrorDomain | errSSLUnknownRootCert | - 9812 |
NSOSStatusErrorDomain | errSSLNoRootCert | - 9813 |
NSOSStatusErrorDomain | errSSLCertExpired | - 9814 |
NSOSStatusErrorDomain | errSSLCertNotYetValid | - 9815 |
NSOSStatusErrorDomain | errSSLHostNameMismatch | - 9843 |
Приложение B: глоссарий
Если Вы не знакомы с TLS, и в частности инфраструктурой открытых ключей X.509, многие термины, использованные в этом technote, могут быть пугающими. Этот глоссарий объясняет эти условия и их определенное значение в этом контексте.
запрос аутентификации — HTTP или ответ HTTPS, указывающий, что сервер требует информации аутентификации от клиента. Основа представляет это с
NSURLAuthenticationChallengeкласс, и это также использует эту инфраструктуру для поддержки пользовательской оценки доверия сервера HTTPS. Запрос аутентификации происходит из пространства защиты.сертификат — Видит цифровой сертификат.
центр сертификации — Организация, ответственная за выпуск сертификатов. Каждый центр сертификации публикует один или несколько корневых сертификатов в целях оценки доверия на сертификатах, выпущенных теми полномочиями. См. также доверенный центр сертификации.
прикрепление центра сертификации — более строгая форма доверительной оценки, требующей, чтобы сертификат сервера был выпущен определенным центром сертификации (не только любой доверенный центр сертификации).
закрепление сертификата — более строгая форма доверительной оценки, требующей, чтобы сервер использовал определенный сертификат или сертификат, содержащий определенный открытый ключ.
список аннулированных сертификатов (также CRL) — список сертификатов, которые отменили, и таким образом нельзя доверять.
CRL — См. список аннулированных сертификатов.
цифровой сертификат (обычно просто сертификат) — структура данных, использующая цифровую подпись для соединения информации об объекте с открытым ключом. В TLS все цифровые сертификаты являются фактически цифровыми сертификатами X.509. См., что также предмет, эмитент, самоподписал сертификат, сертификат сервера, промежуточный сертификат, корневой сертификат и доверял привязке.
цифровые идентификационные данные (также идентификационные данные) — комбинация сертификата и закрытого ключа связались с открытым ключом, встроенным в тот сертификат.
цифровая подпись — структура данных, доказывающая подлинность некоторых других данных. В шифровании с открытым ключом можно заверить цифровую подпись с открытым ключом и быть гарантированы это, оно создавалось со связанным закрытым ключом.
расширенная проверка — строгая доверительная политика оценки используется для расширенных сертификатов проверки.
HTTP — Посмотрите гипертекстовый транспортный протокол.
HTTPS — HTTP по TLS. Посмотрите RFC 2818.
Оценка доверия сервера HTTPS — HTTPS является HTTP по TLS, таким образом, это эквивалентно оценке доверия сервера TLS.
Гипертекстовый Транспортный протокол (также HTTP) — Действительно? Вы ищете это в глоссарии!?! Так или иначе посмотрите RFC 2616.
идентификационные данные — Видят цифровые идентификационные данные.
промежуточный сертификат — сертификат, существующий на пути эмитентов между сертификатом сервера и корневым сертификатом.
эмитент — Для цифрового сертификата X.509, это - объект, подписавший сертификат.
OCSP — См. онлайновый протокол состояния сертификата.
Онлайновый Протокол Состояния Сертификата (также OCSP) — протокол, чтобы проверить, был ли отменен цифровой сертификат. Посмотрите RFC 2560.
закрытый ключ — В шифровании с открытым ключом, это - ключ, используемый, чтобы дешифровать данные или генерировать цифровую подпись.
пространство защиты (также область) — HTTP или сервер HTTPS или область на таком сервере, требующем аутентификации. В Основе это представлено
NSURLProtectionSpaceкласс. См. также запрос аутентификации.открытый ключ — В шифровании с открытым ключом, это - ключ, используемый, чтобы зашифровать данные или заверить цифровую подпись.
шифрование с открытым ключом — криптографическая система, использующая два отдельных ключа, открытый ключ для шифрования и закрытый ключ для дешифрования. Закрытый ключ может также использоваться для генерации цифровой подписи, которую может заверить открытый ключ.
инфраструктура открытых ключей — механизм для управления открытыми и закрытыми ключами, и в частности способом, которым открытый ключ встраивается в сертификате. TLS использует инфраструктуру открытых ключей X.509.
область — Видит пространство защиты.
корневой сертификат — самоподписанный сертификат, предоставленный центром сертификации в целях оценки доверия на сертификатах, выпущенных теми полномочиями.
Уровень защищенных сокетов (также SSL) — предшественник к TLS.
самоподписанный сертификат — цифровой сертификат X.509, где предметом и эмитентом является то же. Корневые сертификаты самоподписываются, но любой может создать их собственный самоподписанный сертификат.
сертификат сервера — цифровой сертификат X.509, предоставленный сервером TLS. Протокол TLS гарантирует, что сервер удерживает закрытую клавишу, связанную с открытым ключом, встроенным в этот сертификат. Это - этот сертификат, это - предмет оценки доверия сервера TLS.
оценка доверия сервера — доверительный механизм оценки, используемый клиентом, чтобы определить, доверяет ли это серверу. В этом контексте это - синоним для оценки доверия сервера TLS.
SSL — Посмотрите уровень защищенных сокетов.
предмет — Для цифрового сертификата X.509, это - объект, идентифицирующийся сертификатом. В TLS предметом сертификата сервера обычно является имя DNS сервера.
TLS — См. безопасность транспортного уровня.
Сервер TLS доверяет оценке — Доверительная оценка, состоящая из оценки доверия сертификата X.509, сопровождаемой дополнительными специфичными для TLS проверками. Воздействует на сертификат сервера.
Безопасность Транспортного уровня (также TLS) — протокол системы защиты, широко использующийся в Интернете. Преемник SSL. Посмотрите RFC 5246.
доверительная оценка — Это - процесс, которым решает объект, доверять ли другому объекту, на основе цифрового сертификата другого объекта. См. также оценку доверия сервера TLS.
доверяемая привязка — сертификат, которому слепо доверяет система. Это обычно - корневой сертификат центра сертификации, испекшийся в систему, но в некоторых ситуациях можно программно отметить любой сертификат как доверяемую привязку.
доверенный центр сертификации — Центр сертификации, корневой сертификат которого испекся в систему как доверяемая привязка.
допустимый диапазон дат — Для цифрового сертификата X.509, это - диапазон дат, во время которых сертификат нужно считать допустимым.
проверьте дату — В оценке доверия сертификата X.509, это - дата, в которой доверительная оценка, как считают, произошла. Это релевантно, потому что каждый сертификат включает допустимый диапазон дат.
Сертификат X.509 — Видит цифровой сертификат X.509.
Сертификат X.509 доверяет оценке — Доверительная оценка на основе сертификатов X.509. См. также оценку доверия сервера TLS.
Цифровой сертификат X.509 (также сертификат X.509) — определенный тип цифрового сертификата. Это - единственный тип сертификата, это относится к TLS.
Инфраструктура открытых ключей X.509 — инфраструктура открытых ключей используется TLS. Посмотрите RFC 5280.
История версии документа
| Дата | Примечания |
|---|---|
| 29.07.2014 | Исправленный руководство в разделе «HTTP Live Streaming» (r. 16538960). Фиксированный упорядочивание столбца в таблице в Приложении A (r. 16057325). |
| 13.03.2014 | Обновленный для Безопасности API изменяется в iOS 7 и OS X 10.9. Добавленный раздел NSURLSession. Добавленный три полезных совета новостей. Обновленный для ссылки на пример кода CustomHTTPProtocol и TN2326. Расширенный раздел «Enforcing Stricter Server Trust Evaluation». Другие незначительные редакционные изменения. |
| 07.02.2013 | Разъясненный природа +setAllowsAnyHTTPSCertificate:forHost:. |
| 10.10.2012 | Новый документ, описывающий, как можно разрешить оценку доверия сервера HTTPS, например, для работы с сервером с недостающим промежуточным сертификатом. |