Некоторые пробелы в понимании рабочего процесса инфраструктуры открытых ключей - PullRequest
7 голосов
/ 31 января 2011

Недавно я наткнулся на базовое понимание процесса работы в действии PKI. Я просмотрел основные статьи о принципах, но все же чувствую себя довольно глупо, чтобы понять этот процесс. Я понимаю, что PKI не для «Моего блога», но для простоты давайте рассмотрим простой пример «Мой интернет-магазин» (например, apache и php) и простые концепции. Я написал несколько утверждений, которые могут быть расплывчатыми или даже ошибочными, но вот что я хочу знать о процессе PKI:

  1. «Мой интернет-магазин» как компания должна быть «сертифицирована» в каком-либо стороннем СА. Это означает, что мне нужно купить какое-то членство на 1 год в этом ЦС, а затем они зарегистрируют «Мой интернет-магазин» в своих системах и выдадут мне что-то вроде сертификата и пару уникальных открытых и закрытых ключей. Получу ли я файл сертификата?

  2. Выданный сертификат заполнен моей информацией и открытым ключом и хранится в каком-то файле на моем веб-сервере. Сертификат подтверждает, что «Мой интернет-магазин» не является бюро воров.

  3. Каждый раз, когда пользователи получают доступ к «Моему интернет-магазину» через «https», их браузеры «молча» проверяют представленный сертификат «Моего интернет-магазина» на тот, который зарегистрирован в CA.

    1. А как насчет пользователей? Их браузеры генерируют локальные открытые + закрытые ключи при входе в «Мой интернет-магазин» через https?
  4. Когда какой-либо пользователь входит в «Мой интернет-магазин» через https, происходит следующее: «Мой интернет-магазин» (веб-сервер) получает открытый ключ (PK1) пользователя. Сервер молча представляет сертификат «Мой интернет-магазин» пользователю, поэтому пользователи получают открытый ключ (PK2) «Мой интернет-магазин». После некоторой тихой проверки браузер пользователя проверяет представленный сертификат и устанавливает безопасный канал.

  5. Когда пользователь отправляет запрос по защищенному каналу, запросы шифруются открытым ключом «Мой интернет-магазин». Затем веб-сервер расшифровывает запрос с помощью своего закрытого ключа. Затем веб-сервер отправляет зашифрованный ответ с открытым ключом пользователя. В конце браузер пользователя расшифровывает ответ своим закрытым ключом.

Ответы [ 3 ]

3 голосов
/ 04 февраля 2011

Принимая эти вопросы за вопросом:

(1) «Мой интернет-магазин» как компания должна быть «Сертифицирован» в какой-либо третьей стороне CA. Это означает, что мне нужно купить какой-то 1 год членства в этом CA, и Затем они зарегистрируют «Мой интернет-магазин». в их системах и выдать мне некоторые такие вещи, как сертификат и пара уникальных открытых и закрытых ключей. Получу ли я файл сертификата?

Да. Кроме того, это варьируется от ЦС к ЦС - некоторые ЦС, членство на 1 год и действующая кредитная карта достаточно (не трудно получить, даже если вы являетесь группой из них), некоторые ЦС требуют определенного количества документов чтобы убедиться, что вы тот, кем вы говорите. ЦС хорош только настолько, насколько хорош процесс проверки клиента, поэтому, как правило, чем более обременителен этот процесс, тем лучше (и дороже) ЦС.

Когда вы заплатите свои деньги и сделаете документы, тогда вы и ЦС сгенерируете как минимум 2 вещи:

  • Пара открытых / закрытых ключей. Часто это генерируется ВАМИ, а не ЦС. Качество того, как вы сгенерировали и сохранили свою пару ключей, также является фактором, определяющим, насколько другая организация может доверять вашему веб-сайту. Как правило, для сертификатов идентификации (например, сертификатов сервера SSL) рекомендуется, чтобы клиент (My e-Shop) генерировал ключ.
  • Вы отправите запрос на сертификат в стандартном формате (пример: PKCS10) в ЦС. Он будет содержать информацию о моем интернет-магазине и открытый ключ.
  • Компания CA проверит ваши документы и удостоверится, что вы - это вы. Затем он будет использовать свой CA для цифровой подписи сертификата для вас. Этот сертификат содержит набор только что предоставленной вами информации, некоторую дополнительную информацию, которую поставщик CA устанавливает для вас, ваш открытый ключ и цифровую подпись, сгенерированную путем криптографического связывания всех вышеупомянутых данных с закрытым ключом CA.

Вы получаете одну из двух вещей:

  • только сертификат (если вы сгенерировали собственную пару ключей)
  • сертификат и пара ключей - если ЦС сгенерировал пару ключей для вас

(2) выданный сертификат заполнен моим информация и открытый ключ и хранятся в какой-то файл на моем веб-сервере. сертификат подтверждает, что «мой Интернет-магазин »- это не воровское бюро.

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

(3) Каждый раз, когда пользователи заходят в «Мой интернет-магазин» через «https» их браузеры «Молча» проверяет представленное сертификат «Мой интернет-магазин» с тот, который зарегистрирован в CA.

Для некоторого определения "молчать". Базовый браузер проверяет, что сертификат: - в настоящее время действует - подписан центром сертификации, которому доверяет браузер (либо он запрещает доступ, либо выдает всплывающее окно)

Надстройки браузера пойдут дальше и будут выполнять такие вещи, как проверка полного пути (вплоть до самозаверяющего корня) и проверка состояния сертификата. Чем выше риск распространения информации по каналу, тем больше нужно проверять.

(4) Когда какой-либо пользователь входит в «Мой интернет-магазин» через https происходит следующее: «Мой Интернет-магазин »(веб-сервер) получает общественность ключ (PK1) пользователя. Сервер молча вручает сертификат «Мой интернет-магазин» для пользователя, поэтому пользователи получают открытый ключ (PK2) «Мой интернет-магазин». После некоторого молчания проверка браузера пользователя проверяет представленный сертификат и установлена ​​безопасная труба.

  • А как насчет пользователей? У своих браузеров родылокальные открытые + закрытые ключи при входе в «Мой интернет-магазин» через https?

ОК - здесь все идет не так.

Для получения подробной информации, проверьте протокол SSL - раздел рукопожатия даст вам серьезные факты.

браузер и веб-сервер передают информацию туда и обратно, что позволяет им создавать ключ шифрования сеанса.Браузер генерирует некоторый исходный материал, используемый для настройки сеанса, но это не «открытый ключ пользователя (PK1)».Пользователю не нужно иметь учетные данные PKI, ЕСЛИ сервер не настроен для аутентификации клиента.При обычном запуске мельницы My e-Shop у сервера есть учетные данные PKI, браузер на лету генерирует какой-то ключевой материал только для одного сеанса.Сервер абсолютно не знает, кто пользователь браузера, с точки зрения SSL - вся идентификация пользователя происходит из пароля или чего-то еще на уровне приложения.

ПРИМЕЧАНИЕ. Это для обычной коммерческой транзакции.Чем выше риск, тем выше защита.Транзакции с высоким риском часто требуют аутентификации клиента.

(5) Когда пользователь отправляет запрос через защищенный канал, запросы шифруются открытым ключом «Мой интернет-магазин».Затем веб-сервер расшифровывает запрос с помощью своего закрытого ключа.Затем веб-сервер отправляет зашифрованный ответ с открытым ключом пользователя.В конце браузер пользователя расшифровывает ответ своим закрытым ключом.

Не совсем.Это и есть сорняки - разработчик веб-приложения относительно абстрагируется от всего этого.Но - содержимое сеанса не зашифровано асимметричными ключами - это будет мучительно загружать процессор.PKI сервера и данные квитирования, генерируемые браузером «на лету», используются для обмена ключом шифрования сеанса.Частично это то, что клиент выбирает и отправляет секретный ключ, зашифрованный в открытом ключе сервера.Поскольку только сервер имеет закрытый ключ, только сервер может дешифровать данные, отправленные клиентом.

Этот секретный ключ является симметричным (именно этот алгоритм также является частью квитирования) и используется для оставшейся частисеанс.

1 голос
/ 03 февраля 2011

Ваши шаги неверны на нескольких разных уровнях. Позвольте мне переформулировать их, надеюсь, в ясной манере.

  1. Ваш сайт должен иметь сертификат SSL от доверенного стороннего CA (Verisign и т. Д.). Вам нужно будет купить его у них. Вы создадите пару открытый / закрытый ключ, предоставите им свой открытый ключ (это часть запроса сертификата), и они сгенерируют сертификат.

  2. Сертификат содержит доменное имя вашего сайта, ваш открытый ключ и некоторую другую дополнительную информацию. Он ничего не проверяет, в частности, что ваш сайт не является "бюро воров". Все, что он обычно подтверждает, - это то, что вы являетесь владельцем доменного имени, для которого вы запрашиваете сертификат. Это не означает, что ваш сайт заслуживает доверия в любом случае.

  3. Когда пользователь заходит на ваш сайт через HTTPS, ваш сервер отправит сертификат в браузер клиента. Клиент никогда не связывается с ЦС для проверки вашего сертификата.

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

  1. Когда пользователь заходит на ваш сайт через HTTPS, ваш сервер отправляет сертификат клиентскому браузеру. Клиент будет использовать это для выполнения рукопожатия SSL. Это рукопожатие между браузером и вашим сайтом и создает безопасный туннель. Специфика протокола рукопожатия более техническая, чем вам нужно.

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

лучше?

0 голосов
/ 01 февраля 2011

По поводу пункта 3:

Насколько я знаю, это не совсем правильно.Поскольку на самом деле не существует какой-либо установленной инфраструктуры для тестирования в реальном времени (по сравнению с такими службами, как DNS), веб-сервер отправит полную цепочку сертификатов в браузер.С другой стороны, браузер или операционная система поставляется с набором доверенных корневых сертификатов (которые необходимо иногда обновлять, обновлять окна, новые версии браузера и т. Д.)

И да, браузер долженсгенерировать «ненадежную» пару ключей, поскольку при нормальных обстоятельствах обычный пользователь не будет генерировать свой собственный сертификат.

Относительно пункта 5:

Также это не совсем правда.Вычисление асинхронного шифрования требует большого количества времени.Таким образом, алгоритм RSA используется только для обмена ключами для более быстрых стандартов синхронного шифрования (например, AES, 3TES).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...