Передача данных надежно

Одним важным аспектом компьютерной безопасности является безопасная коммуникация данных по сети. Несмотря на то, что можно разработать собственные протоколы системы защиты и использовать низкоуровневый APIs, такой как сокеты BSD и Общий Crypto для реализации их, обычно намного более удобно использовать стандартные протоколы и высокоуровневый APIs, когда они доступны.

Протокол Уровня защищенных сокетов (SSL) и его преемник, протокол Transport Layer Security (TLS), предоставляют поддержку для безопасной коммуникации по сети. Они обычно используются по соединениям TCP/IP, таким как Интернет. Они используют основанную на сертификате аутентификацию, чтобы гарантировать, что Вы связываетесь с допустимым сервером, они проверяют данные для предотвращения вмешательства, и они могут использовать криптографию с открытым ключом для принятия мер против подслушивания или подделки сообщения.

SSL встроен во все главные браузеры, и веб-серверы (новые версии также включают TLS). Каждый раз, когда Вы используете безопасный веб-сайт — например, чтобы отправить Ваш номер кредитной карты поставщику по Интернету — и видеть идентификатор протокола https вместо http в начале URL Вы используете SSL или TLS для коммуникации.

Существует несколько способов использовать в своих интересах SSL и TLS:

В дополнение к этому 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 включает следующие связанные с безопасностью компоненты:

В дополнение к 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 позволяет Вам:

Безопасный Транспорт использует управление сертификатом и услуги криптографии, предоставленные 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.