Передача данных надежно
Одним важным аспектом компьютерной безопасности является безопасная коммуникация данных по сети. Несмотря на то, что можно разработать собственные протоколы системы защиты и использовать низкоуровневый APIs, такой как сокеты BSD и Общий Crypto для реализации их, обычно намного более удобно использовать стандартные протоколы и высокоуровневый APIs, когда они доступны.
Протокол Уровня защищенных сокетов (SSL) и его преемник, протокол Transport Layer Security (TLS), предоставляют поддержку для безопасной коммуникации по сети. Они обычно используются по соединениям TCP/IP, таким как Интернет. Они используют основанную на сертификате аутентификацию, чтобы гарантировать, что Вы связываетесь с допустимым сервером, они проверяют данные для предотвращения вмешательства, и они могут использовать криптографию с открытым ключом для принятия мер против подслушивания или подделки сообщения.
SSL встроен во все главные браузеры, и веб-серверы (новые версии также включают TLS). Каждый раз, когда Вы используете безопасный веб-сайт — например, чтобы отправить Ваш номер кредитной карты поставщику по Интернету — и видеть идентификатор протокола https
вместо http
в начале URL Вы используете SSL или TLS для коммуникации.
Существует несколько способов использовать в своих интересах SSL и TLS:
На высоком уровне можно использовать
https
URL с Загрузочной системой URL (класс NSURL, функции CFURL и связанные классы).На более низком уровне можно использовать API CFNetwork для согласования SSL или соединения TLS.
Для максимального управления можно использовать Безопасный Транспортный API в OS X или в iOS 5.0 и позже.
В дополнение к этому APIs много инструментов с открытым исходным кодом используют OpenSSL для безопасных сетей. При использовании OpenSSL в публично поставляющих приложениях необходимо предоставить собственную копию библиотек OpenSSL, предпочтительно как часть комплекта приложений; библиотеки OpenSSL, которые предоставляет OS X, осуждаются.
Используя загрузочную систему URL
Загрузочной системой URL является очень высокоуровневый API, который можно использовать для доступа к содержанию HTTP://
, HTTPS://
, и FTP://
URLs. Поскольку Загрузочная система URL работает с безопасным https://
URLs, это может использоваться для безопасного транспорта данных.
Когда необходимо загрузить ресурс с удаленного сервера, необходимо использовать загрузочную систему URL. В отличие от CFNetwork, этот API не поддерживает поток текущих данных. Это делает его лучшим выбором для мобильного использования, когда это удовлетворяет Ваши потребности (особенно с сотовыми сетями, где Ваш IP-адрес может измениться, поскольку Вы переключаетесь от башни до башни).
CFNetwork
CFNetwork является iOS и OS X API для создания, отправки и получения сериализированных сообщений по сети. Это обеспечивает высокоуровневый интерфейс, чем Безопасный Транспорт, который может использоваться приложениями, чтобы установить и поддержать безопасный SSL или TLS сетевой сеанс и добавить информацию аутентификации к сообщению.
CFNetwork включает следующие связанные с безопасностью компоненты:
CFHTTPMessage, который можно использовать для создания, сериализирует, десериализовывает и управляет сообщениями протокола HTTP. Если необходимо добавить информацию аутентификации к сообщению, необходимо использовать API CFHTTPMessage вместо другого APIs CFHTTP.
CFHTTPAuthentication, применяющий учетные данные аутентификации к оспариваемым сообщениям HTTP. Вы используете этот API в сочетании с CHTTPMessage.
Дополнения Сокета CFStream, который выделяет чтение и потоки записи и предоставляет константам, используемым CFReadStream и CFWriteStream APIs для установки протоколов системы защиты. Если необходимо установить информационное соединение потоковой передачи (в противоположность Запросу HTTP), необходимо использовать объекты CFStream.
CFFTPStream, который можно использовать для выполнения передач файлов FTP с помощью протокола передачи файлов (FTP). Этот компонент позволяет Вам отправить пароли в Ftp-серверы.
В дополнение к API CFNetwork Вы используете CFReadStream и CFWriteStream APIs в Базовой платформе Основы, чтобы создать и управлять чтением и потоками записи, от которых зависит CFNetwork. Можно указать SSL или версию протокола TLS, чтобы зашифровать и дешифровать поток данных. Обратите внимание на то, что CFReadStream и CFWriteStream “бесплатные соединенный мостом” с их дубликатами Основы Какао, классами NSInputStream
и NSOutputStream
. Это означает, что каждый Базовый тип Основы является взаимозаменяемым в вызовах функции или вызовах метода с соответствующим соединенным мостом объектом Основы, таким образом, можно использовать или C или интерфейсы Objective C, какой бы ни является самым удобным для Вас.
Безопасный транспорт
Безопасным Транспортом является низкоуровневый API для работы с SSL и TLS. С Безопасным Транспортом Ваш код должен установить сетевое соединение и обеспечить функции обратного вызова, Защищающие Транспортные вызовы для выполнения операций I/O по сети.
Безопасный Транспорт используется и в OS X и в iOS. CFNetwork и Загрузочная система URL APIs создаются поверх Безопасного Транспорта.
Можно использовать Безопасный Транспортный API, чтобы установить параметры для безопасного сеанса, открыть и поддержать сеанс и закрыть сеанс. Однако, потому что Безопасным Транспортом является довольно сложный API, необходимо обычно использовать Безопасный Транспорт непосредственно, только если Вам нужно больше управления, чем можно добраться с CFNetwork.
Безопасный Транспортный API позволяет Вам:
Выберите, какие протоколы (версии SSL/TLS) и наборы шифров должны быть позволены, и (после соединения) определяют, какой комплект протоколов и набор шифров были фактически согласованы.
Укажите параметры Diffie-Hellman для ключевого обмена
Укажите, должна ли аутентификация клиентской стороны требоваться, и получать ту идентификацию.
Управляйте сертификатами и положите, что политики — указывают сертификаты, чтобы использовать для клиента или идентификации сервера, указать доменное имя для использования при определении, допустим ли сертификат другого узла, обеспечьте доверительные политики для сертификатов с истекшим сроком и неизвестных или корневых сертификатов с истекшим сроком, добавьте дополнительные доверяемые корневые сертификаты и т.д.
Безопасный Транспорт использует управление сертификатом и услуги криптографии, предоставленные CDSA и Общим Crypto. Безопасный Транспорт не имеет никаких зависимостей транспортного уровня; это может использоваться с сокетами BSD, Открыть Transport или любой другой доступный протокол транспортного уровня.
OpenSSL
OS X включает низкоуровневый интерфейс командной строки в инструментарий криптографии открытого исходного кода OpenSSL; этот интерфейс не доступен на iOS.
Далее, несмотря на то, что OpenSSL обычно используется в сообществе разработчиков ПО с открытым исходным кодом, он не обеспечивает стабильный API от версии до версии. Поэтому программируемый интерфейс к OpenSSL осуждается в OS X и не предоставлен в iOS. Использованию предоставленных Apple библиотек OpenSSL приложениями строго обескураживают.
Для обеспечения совместимости, если приложение зависит от OpenSSL, необходимо скомпилировать его сами и статически соединить известную версию OpenSSL в приложение. Такое использование работает и над iOS и над OS X.
В целом, однако, необходимо использовать API CFNetwork для безопасных сетей и Сертификата, Ключа и Trust Services API для криптографических служб. Также в OS X, можно использовать Безопасный Транспортный API.
Узнавать больше
Для приобретения знаний о других проблемах безопасности, связанных с сетевой связью, читайте Используя Сети Надежно в Сетевом Обзоре.
Для получения дополнительной информации о стандарте TLS обращаетесь на сайт Рабочей группы TLS IETF.
См. Руководство по программированию Загрузочной системы URL для получения информации об этом API.
Для узнавания больше о CFNetwork считайте Руководство по программированию CFNetwork.
Для начала работы с Безопасным Транспортом посмотрите Безопасную Транспортную Ссылку. Для примера кода см. SSLSample.