Я разрабатываю приложение для Android, которое должно использовать веб-сервисы .Net через SSL, в которых у меня нет опыта. Теперь я ищу некоторые рекомендации и объяснения по рукопожатию SSL и сертификатам.
Примечание: сервер использует IP-адрес, а НЕ доменное имя. Это интранет-приложение.
До сих пор я создал сертификат (называемый самозаверяющим?) на веб-сервере из IIS 7. Чтобы использовать его из приложения Android, я нашел два способа сделать это:
1). Встроил сертификат в приложение (какой сертификат? как его получить?)
2). Доверяйте всем сертификатам (человек сказал, что при таком подходе возникает проблема с безопасностью, не могли бы вы подробнее рассказать? Он по-прежнему выполняет рукопожатие?)
СЕРТИФИКАТЫ:
Сколько типов сертификатов содержится в рукопожатии и какие они?
Имеет ли самозаверяющий сертификат корневой сертификат? Если да, то как я могу их получить?
Можно ли переместить/скопировать самоподписанный сертификат с одного сервера на другой?
РУКОПОЗВАНИЕ:
Во-первых, правильный ли это процесс?
Процесс рукопожатия SSL (скопирован с веб-сайта) описан ниже:
Клиент инициирует процесс рукопожатия SSL, отправив на сервер URL-адрес, начинающийся со следующего: https://.
Сначала клиент отправляет веб-серверу список всех алгоритмов шифрования, которые он поддерживает. Алгоритмы, поддерживаемые SSL, включают RC4 и стандарт шифрования данных (DES). Клиент также отправляет серверу свою случайную строку запроса, которая будет использоваться позже в процессе.
Будет ли встроенный сертификат отправлен сюда?
Затем веб-сервер выполняет следующие задачи:
Выбирает алгоритм шифрования из списка алгоритмов шифрования, поддерживаемых клиентом и полученных от него.
Отправляет клиенту копию своего сертификата сервера.
Отправляет клиенту свою случайную строку запроса
Клиент использует копию сертификата сервера, полученного от сервера, для проверки подлинности сервера.
Клиент получает открытый ключ сервера из сертификата сервера.
Затем клиент генерирует предварительный секрет. Это другая случайная строка, которая, в свою очередь, будет использоваться для генерации ключа сеанса для сеанса SSL. Затем клиент шифрует другое значение, называемое предварительным секретом, используя открытый ключ сервера, и возвращает это зашифрованное значение серверу. Это сопровождается хэшем сообщений рукопожатия и мастер-ключом. Хэш используется для защиты сообщений, которыми обмениваются в процессе рукопожатия. Хэш генерируется из первых двух случайных строк, передаваемых между сервером и клиентом.
Что такое главный ключ?
Сервер отправляет клиенту хэш с ключом всех сообщений рукопожатия, которыми до сих пор обменивались две стороны.
Из чего сделан этот ключевой хэш?
Затем сервер и клиент генерируют ключ сеанса из разных случайных значений и ключей, применяя математические вычисления.
Сеансовый ключ используется как общий секретный ключ для шифрования и расшифровки данных, которыми обмениваются сервер и клиент.
Сеансовый ключ сбрасывается, когда сеанс SSL либо истекает по тайм-ауту, либо завершается.