Особенности использования самоподписанных сертификатов для SSL/TLS

Введение

Протоколы SSL/TLS широко используется в ip-сетях там, где нужно обеспечить безопасность передаваемых данных. Они обеспечивают три основных сервиса: конфиденциальность данных (секретность), целостность данных (защита от подмены или искажения), аутентификация сервера и опционально клиента. Но при неправильном их использовании они не дают эффекта т. к. не обеспечивается аутентификация сервера, вследствие этого данные могут быть перехвачены и/или искажены злоумышленником. Если у него есть возможность вклинится в канал связи между клиентом и сервером (а такая возможность часто есть), то клиент может установить шифрованный канал до сервера злоумышленника, который таким образом сможет как читать, так и изменять закрытые данные. Упрощенная схема такого нападения показана на рис. 1.

Attack Man in The Midle
Атака типа "человек посередине"
Поэтому важно, чтоб клиент мог проверить, что подключается к настоящему серверу. Сделать он это может на основе сертификата сервера.

В идеале сертификат (в формате x.509) сервера должен быть подписан одним из общеизвестных CA (Certificate Authority, центр сертификации). Большинство клиентских приложений (веб-браузеры, почтовые клиенты) поставляются с набором сертификатов этих CA, что позволяет им при подключении к серверу проверять действительность сертификата. Но такой сертификат стоит денег и его получение требует времени, поэтому очень часто используются сертификаты, которые подписаны сами собой. В инете много руководств о том, как создать самоподписанный сертификат, но нигде не предостерегают о том, что для обеспечения работы SSL/TLS при этом необходимы дополнительные действия.

Порядок работы с самоподписанными сертификатом может быть таким:

  1. администратор смотрит на сервере хэш сертификата. В openssl это можно сделать так:
    openssl x509 -inform PEM -sha1 -fingerprint -noout -in server.crt.
  2. это значение достоверным (значение несекретное, но важно исключить его подмену) каналом (телефон, почта и т. п.) сообщается клиенту.
  3. при первом сеансе связи клиент сохраняет сертификат, проверяя при этом значение хэша.
  4. при последующей работе клиентская программа (например, браузер) не должна выдавать никаких предупреждений о том, что подлинность сертификата не может быть проверена.
Если передать значение хэша клиенту нельзя, то 2-й шаг можно пропустить (хотя это нежелательно), но установить сертификат все же нужно. Это защитит от будущих атак, если в момент установки сертификата трафик не перехватывается.

Инструкция для пользователей на примере IE

1. Когда вы заходите на сайт https://inet.icn.bmstu.ru Браузер показывает предупреждение, что подлинность этот сертификата подписан неизвестным центром сертификации, и нужно просмотреть содержимое сертификата:

Security Alert
Нажмем кнопку "View Certificate"

2. Далее будет сообщение о том, что центр сертификации (CA) подписавший этот сертификат не входит в число доверенных. Чтобы его включить в их число необходимо установить сертификат:

Certificate
Нажмем кнопку "Install Certificate..."

3. Потом два раза жмем кнопку "Next", затем кнопку "Finish"

4. Появится предупреждение:

Security Warning

Обращаю внимание, что для сервера inet.icn.bmstu.ru. Значение SHA1 хэша сертификата должно быть именно таким: C3500115 808286A3 093CFD0B 80F4275B FC5C0B2D. Если вы видите другое значение, то возможно Ваш трафик уже перехватывается злоумышленником. Лучше если это значение будет распечатано или записано на бумаге, поскольку то, что вы видите через web, так же может быть подменено, если Ваш сетевой трафик перехватывается.

5. Если после импорта сертификата закрыть IE, запустить заново и снова зайти на https://inet.icn.bmstu.ru то никакого окошка с предупреждением как на первом рисунке уже быть не должно. Если в строке статуса щелкнуть по иконке в виде замка, то должно появиться окошко:

Certificate

При дальнейшей работе так же не должно возникать сообщений, что подлинность сертификата не может быть установлена.
Южанинов Антон, март 2005 г.
Disclaimer
Составитель данного текста не является специалистом в области информационной безопасности. Если вы найдете здесь ошибки или неточности - пишите на citrin(аt)citrin.ru