2013-06-02 3 views
6

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

  1. клиент подключается к службе WCF
  2. службы WCF ответы с его открытым ключом, и это свидетельство
  3. затем клиент проверяет сертификат и шифрует его учетные данные с ключом
  4. службы общественного ФОС расшифровывает что сообщение с его секретным ключом и проверяет инфо-
  5. и т.д ...

Знает вот некоторые Тхи ngs Я не понимаю:

  • На шаге 4. где служба WCF располагалась в закрытом ключе?
  • Зачем нужен сертификат SSL? от чтения в Интернете необходимо убедиться, что Служба - это то, кем я хочу. Это не имеет смысла для меня, потому что сначала я знаю IP-адрес моей службы в своей локальной сети (я знаю, кто эта служба). Притворись, что это не тот случай, когда я нахожусь в Интернете, и кто-то пытается меня взломать. В этом случае я считаю, что если я подключусь к их сервису вместо моего реального, я ничего не могу сделать, потому что, если вы вспомните на шаге 2, служба WCF ответила открытым ключом и сертификатом (на обычном тексте), что означает, что кто-то может получить этот сертификат и использовать его?
  • Если я использую SSL-сертификат, и у кого-то есть доступ к компьютеру, на котором размещена служба, он может каким-то образом получить секретный ключ, который делает мои подключения незащищенными?

ответ

16

Во-первых, на шаге 3 отсутствуют некоторые шаги. Что на самом деле происходит на третьем этапе является:

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

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

В любом случае движение на вопросы:

Где служба держать закрытый ключ?

В Windows это хранилище сертификатов, предоставляемое операционной системой. В других операционных системах я не знаю.

Зачем нужен сертификат?

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

Итак, когда мы совершаем транзакцию, я показываю вам листок бумаги, в котором говорится: «Эрик Липперт утверждает, что владельцем этого листка бумаги является Эрик Липперт, подписанный, Эрик Липперт». Ты веришь мне? Если вы уже доверяете Эрику Липперту, вам не нужен листок бумаги, и если вы не доверяете Эрику Липперту, то бумага не устанавливает доверия. Это «самоподписанный сертификат».

Теперь, если я покажу вам листок бумаги, в котором говорится: «VeriSign заявила, что владелец этого листка бумаги Эрик Липперт, подписанный VeriSign», тогда возникает вопрос: доверяете ли вы VeriSign проверить мою личность? ? Если вы это сделаете, то это свидетельствует о том, что человек, с которым вы разговариваете, является тем, кем они себя называют.

Это цель сертификата. Он устанавливает, что конкретный открытый ключ действительно связан с конкретной организацией, потому что это , подписанный взаимно доверенной третьей стороной, называемый уполномоченным органом .

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

Но сертификат с открытым ключом является общедоступным, так что не может кто-то захватить сертификат и притвориться сервером?

Да, но это не поможет им, если они не украдут закрытый ключ, который является частным. Лицо с чужим сертификатом не может дешифровать сообщения, которые были зашифрованы с помощью открытого ключа, поэтому они не смогут осуществлять обмен секретным ключом с клиентом! Даже если им удастся обмануть клиента, все, что они собираются получить, это поток бит, закодированный секретным ключом по выбору клиента, секретный ключ, который злоумышленник не может получить без частной половины сертификата.

Это означает: если я разрешаю доступ к своему личным ключам, кто-то может выдавать себя за меня, не так ли?

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

6

ответ Эрик Липперта велик, но я думал, что я хотел бы добавить еще несколько деталей в ответ на пару пунктов:

  • Это не имеет смысла для меня, потому что сначала я знаю IP-адрес мой сервис в моей локальной сети (я знаю, кто эта услуга)

Да, верно, что SSL, удостоверяющий личность сервера, может оказаться нецелесообразным, если вы находитесь внутри и внутри страны или в надежной безопасной локальной сети , Однако SSL или более правильно TLS (Transport Layer Security) предоставляет вам зашифрованный канал для обмена данными между вашим клиентом и сервером. Это означает, что если кто-либо из вашего клиента и сервера обнюхивает сеть, они не смогут прочитать сообщение. TLS (SSL) - самый поддерживаемый и простой способ достичь этого.

  • Если я использую SSL sertifiate и кто имеет доступ к компьютеру, на котором размещается услуги, которые он может каким-то образом получить секретный ключ делает мои соединения небезопасными?

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

Надеюсь, что это поможет.

Смежные вопросы