Pull to refresh

Действительно безопасные соединения или персональный CA

SSL — Secure Sockets Layer — протокол, позволяющий создавать безопасное соединение поверх обычного TCP соединения. Протокол позволяет решить две проблемы — предотвращение прослушивания потока, и проверку сторон соединения, что они являются теми, за кого себя выдают.

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

Вот только где он ввел пароль?..


А что нужно для того, чтобы соединение было действительно безопасным? Для этого необходимо и достаточно, чтобы сертификат сервера был подписан не «абы кем», а центром сертификации, который есть у пользователя, и доверяем им. Тогда браузер проверит подпись, увидит, что сертификат выдан на правильное имя сервера, подписан центром сертификации, которому доверяет — и пропустит молча, не выдавая никаких сообщений о проблемах безопасност. Продвинутые браузеры, еще и будут вместо красного «Небезопасное соединение» показывать красивое зелёное «Всё безопасно».

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

Что же делать, если нужно обеспечить безопасность в локальной сети, например, или для маленького, но гордого, «почти free хостинга»? Выход прост: создать свой собственный центр авторизации (CA).

Применение своего CA позволяет решать сразу несколько моментов: с помощью своего CA легко подписывать сертификаты не только для web сервера, но и ftp, pop3, imap, smtp, xmpp и для любых других сервисов, умеющих использовать SSL. Так же, при необходимости, используя свой CA можно создавать авторизацию с помощью пользовательских сертифкатов, впрочем, об этом — в отдельной статье.

Создание своего CA



  1. Устанавливаем на сервере openssl (и sharutils для uuencode).
  2. Редактируем конфигурацию, использующуюся по умолчанию в файле /etc/ssl/openssl.cnf
  3. Придумаем название для нашего CA. Например, банальное MyCA. В дальнейшем, разумеется, заменяете значения по своему вкусу.
    В разделе [ ca ] исправляем CA_default на придуманное нами:
    default_ca = MyCA
    И исправляем название следующего раздела [ CA_default ] на придуманное нами. правим внутри значения, которые нас интересуют:
    [ MyCA ]
    dir = /var/spool/MyCA
    unique_subject = no # Это необходимо для перевыдачи сертификатов по истечении старых
    default_days = 365 # Для выдачи сертификатов для простых случаев, можно поставить 3650 и забыть про ежегодную перевыдачу сертификатов
    default_md = sha1 # Убедитесь, что стоит не хуже sha1 :)


    Для выдачи сертификатов своим сервисам без необходимости каждый раз отвечать на постоянные вопросы, найдите раздел [ req_distinguished_name ] и заполните в нем необходимые параметры:
    [ req_distinguished_name ]
    countryName_default = RU
    stateOrProvinceName_default = Moscow
    localityName_default = Moscow
    0.organizationName_default = My LAN
    organizationalUnitName_default = LAN Secure Services
    emailAddress_default = support@mylan

    Теперь, для того, чтобы выданные сертификаты действовали не только на имя сервера, но так же на его IP, на *.домен, добавим ниже в разделе:
    [ usr_cert ]
    nsComment = "Certificate for My LAN services"
    subjectAltName=DNS:*.mylan,DNS:mylan,DNS:192.168.1.250 # IP и домен подставить свои


END
# a2ensite https_mylan
# service apache2 reload
Всё! После этого можно зайти на mylan и радоваться зелёному значку безопасного соединения.
Главное, не забывайте устанавливать корневой сертификат на компьютер и во все браузеры.

Ссылки на полезные статьи

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.