Понимание SSL для использования веб-сервиса .Net с Android

Я разрабатываю приложение для Android, которое должно использовать веб-сервисы .Net через SSL, в которых у меня нет опыта. Теперь я ищу некоторые рекомендации и объяснения по рукопожатию SSL и сертификатам.

Примечание: сервер использует IP-адрес, а НЕ доменное имя. Это интранет-приложение.

До сих пор я создал сертификат (называемый самозаверяющим?) на веб-сервере из IIS 7. Чтобы использовать его из приложения Android, я нашел два способа сделать это:

1). Встроил сертификат в приложение (какой сертификат? как его получить?)

2). Доверяйте всем сертификатам (человек сказал, что при таком подходе возникает проблема с безопасностью, не могли бы вы подробнее рассказать? Он по-прежнему выполняет рукопожатие?)

СЕРТИФИКАТЫ:

Сколько типов сертификатов содержится в рукопожатии и какие они?

Имеет ли самозаверяющий сертификат корневой сертификат? Если да, то как я могу их получить?

Можно ли переместить/скопировать самоподписанный сертификат с одного сервера на другой?

РУКОПОЗВАНИЕ:

Во-первых, правильный ли это процесс?

Процесс рукопожатия SSL (скопирован с веб-сайта) описан ниже:

  1. Клиент инициирует процесс рукопожатия SSL, отправив на сервер URL-адрес, начинающийся со следующего: https://.

  2. Сначала клиент отправляет веб-серверу список всех алгоритмов шифрования, которые он поддерживает. Алгоритмы, поддерживаемые SSL, включают RC4 и стандарт шифрования данных (DES). Клиент также отправляет серверу свою случайную строку запроса, которая будет использоваться позже в процессе.

    Будет ли встроенный сертификат отправлен сюда?

  3. Затем веб-сервер выполняет следующие задачи:

    Выбирает алгоритм шифрования из списка алгоритмов шифрования, поддерживаемых клиентом и полученных от него.

    Отправляет клиенту копию своего сертификата сервера.

    Отправляет клиенту свою случайную строку запроса

  4. Клиент использует копию сертификата сервера, полученного от сервера, для проверки подлинности сервера.

  5. Клиент получает открытый ключ сервера из сертификата сервера.

  6. Затем клиент генерирует предварительный секрет. Это другая случайная строка, которая, в свою очередь, будет использоваться для генерации ключа сеанса для сеанса SSL. Затем клиент шифрует другое значение, называемое предварительным секретом, используя открытый ключ сервера, и возвращает это зашифрованное значение серверу. Это сопровождается хэшем сообщений рукопожатия и мастер-ключом. Хэш используется для защиты сообщений, которыми обмениваются в процессе рукопожатия. Хэш генерируется из первых двух случайных строк, передаваемых между сервером и клиентом.

    Что такое главный ключ?

  7. Сервер отправляет клиенту хэш с ключом всех сообщений рукопожатия, которыми до сих пор обменивались две стороны.

    Из чего сделан этот ключевой хэш?

  8. Затем сервер и клиент генерируют ключ сеанса из разных случайных значений и ключей, применяя математические вычисления.

  9. Сеансовый ключ используется как общий секретный ключ для шифрования и расшифровки данных, которыми обмениваются сервер и клиент.

Сеансовый ключ сбрасывается, когда сеанс SSL либо истекает по тайм-ауту, либо завершается.


person Riddle    schedule 26.08.2011    source источник
comment
К сожалению, наш вопрос слишком велик для хорошего ответа SO. В первую очередь вам следует прочитать RFC 2246. Кроме того, это вопрос протокола, а не вопрос программирования. Насколько я понимаю правила SO, это не по теме.   -  person President James K. Polk    schedule 27.08.2011


Ответы (1)


Я постараюсь ответить в меру своих знаний здесь

  • Встроен сертификат в приложение (какой сертификат? Как его получить?) Этот сертификат идентифицирует личность клиента/приложения. Вы можете получить его либо через CA, либо самостоятельно. Этот сертификат будет использоваться сервером для проверки личности клиента/приложения.

  • Доверять всем сертификатам (человек сказал, что при таком подходе возникает проблема с безопасностью, не могли бы вы уточнить? Он по-прежнему выполняет рукопожатие?) Он по-прежнему выполняет рукопожатие, но не выполняет проверку сертификата, которая опасно, если вы не подключаетесь внутренне (что, кажется, так и есть). Доверие ко всем сертификатам означает, что объект может претендовать на то, кем он не является, и, таким образом, может получать конфиденциальную информацию от пользователей.

  • Сколько типов сертификатов используется в рукопожатии и какие они? В рукопожатии у вас есть сертификат сервера и, возможно, сертификат клиента (для двухфакторной аутентификации).

  • Имеет ли самозаверяющий сертификат корневой сертификат? Если да, то как я могу их получить? Под корневым сертификатом, насколько я знаю, подразумеваются те, которые идентифицирует сам ЦС, и, следовательно, ему больше нечего подписывать. Поскольку ваша личность все еще может быть подтверждена и должна быть подписана центром сертификации, ваш сертификат не будет классифицирован как корневой.

  • Можно ли переместить/скопировать самозаверяющий сертификат с одного сервера на другой? Если коротко, то да, хотя процедуры для разных платформ отличаются. Проверьте [эту ссылку) (http://www.sslshopper.com/how-to-move-or-copy-an-ssl-certificate-from-one-server-to-another.html), там есть инструкции по копированию сертификат для нескольких платформ

  • Будет ли сюда отправлен встроенный сертификат? Нет, встроенный (клиентский) сертификат отправляется после завершения проверки идентификации сервера.

  • Что такое мастер-ключ? Мастер-ключ — это ключ, который используется для получения сеансового ключа для последующего взаимодействия. Он также используется для хеширования сообщений и проверки подлинности сообщений на следующем наборе этапов.

  • Из чего сделан этот хэш с ключом? Он сделан из главного ключа, отправленного клиентом. Чтобы проверить все сообщения, сервер отправил все сообщения, которые были переданы, и хешировал их с помощью главного ключа. Клиент также будет хэшировать свои сообщения с тем же ключом, а затем сравнивать их с данными, отправленными сервером. Только когда хэш совпадает, мы можем быть уверены, что все еще общаемся с тем же сервером.

person momo    schedule 28.08.2011
comment
большое спасибо за ваш полный ответ. Как я уже говорил, я использую IP-адрес. Оказывает ли это какое-либо влияние на два метода (встроенный и доверять всем) - person Riddle; 29.08.2011