суббота, 14 ноября 2009 г.

x.509

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

Причины были следующие:
  • Централизованная структура. Цифровые сертификаты выдаются централизованно, возможно организовать учет выданных сертификатов. Нет необходимости обмена ключами - достаточно распространить корневой сертификат.
  • Контроль действительности ключей. Можно создать так называемый список отзыва, позволяющий сделать недействительными скомпрометированные ключи или сертификаты уволенных сотрудников.
  • Интеграция. Цифровые сертификаты возможно легко использовать в современных почтовых програмах для шифрования и подписей, для авторизации на web-ресурсах и пр.
В данной статье я постараюсь более глубоко остановиться именно на практическом аспекте внедрения данной технологии в коммерческой структуре. Интересующие вас теоретические моменты x.509 вы всегда можете почерпнуть из открытых источников, которых в глобадльной сети великое множество.

Центр выдачи сертификатов

На данный центр возлагается следующий функционал:
  • Генерация сертификатов пользователей на основе поступающих запросов.
  • Генерация и публикация списка отзыва сертификатов на основе выданных сертификатов.
  • Генерация и публикация корневого сертификата в заданные промежутки времени.

Генерация корневого сертификата

Ключи шифрования обычно делают парами, т.е. они состоят из публичной (открытой) и секретной (приватной) части. При использовании OpenSSL секретный ключ уже содержит информация открытого ключа, так что публичный ключ не требуется генерировать отдельно.
Создание секретного ключа:
# openssl genrsa -out privkey.pem 2048
Если ключ необходимо защитить паролем, то добавляем ключа -des3
# openssl genrsa -des3 -out privkey.pem 2048
Использование пароля опрадано в тех случаях, когда доступ к ключу будут иметь множество людей. В таком случае при каждом обращении к ключу потребуется вводить специальный пароль.
Далее необходимо создать запрос на получение сертификата:
# openssl req -new -key privkey.pem -out cacert.csr
Результат генерации запроса можно проверить следующим образом:
# openssl req -noout -text -in cacert.csr
Генерация самоподписанного сертификата:
# openssl x509 -req -signkey privkey.pem -in cacert.csr -out cacert.pem

Генерация сертификатов пользователей

Клиент присылает запрос на выдачу сертификата (файл user-cert.pem).
На основании его запроса генерируем сертификат в файле user-cert.pem:
# openssl x509 -req -in user-cert.csr -CA cacert.pem -CAkey privkey.pem -out user-cert.pem
Если команда выдает ошибку об отсутствии файла индекса
cacert.srl: No such file or directory
тогда добавляем команду его генерации # openssl x509 -req -in user-cert.csr -CA cacert.pem -CAkey privkey.pem -CAcreateserial -out user-cert.pem Данный сертификат можно передавать по незащищенным каналам связи.

Генерация самоподписанного сертификата

# openssl req -new -nodes -keyout server.key -x509 -out server.crt

Клиент

Клиенты центра сертификации бывают разные по уровню владения компьютеров - от чайника до системного администратора. Это обязательно стоит учеть. Если администратору достаточно примера комманд и ссылки на документацию для полноценной работы, то для рядовых сотрудников этого врят ли будет достаточно для пониманию работы с системой.
Перед внедрением следует обязательно разработать подробную инструкцию в картинках по работе как с самими сертификатами и описанием файлов, так и использование этой технологии во всех принятых к использованию в организации пользовательских приложениях. Описание использования данной технологии в продуктах Mozilla приведено мной на отдельном сайте.

Консоль

Данный раздел полезен для специалистов и людей, которые желают знать, что скрывается под покрывалом графических оболочек.
Генерируем секретный ключ клиента :
# openssl genrsa -out privkey.pem 2048
Генерируем запрос на выдачу сертификата user-cert.csr :
# openssl req -new -key privkey.pem -out user-cert.csr
Отправляем запрос в сервер сертификации. После получения подписанного сертификата из центра сертификации пару сертификата и секретного ключа рекомендуется запаковать в формат PKCS12
# openssl pkcs12 -export -in user-cert.pem -inkey privkey.pem -certfile cacert.pem -name "Oleg P. Kluchkin" -out user.p12
При запаковке будет запрошен пароль на пакет - не потеряйте его. Он будет использоваться для доступа к содержимому и при добавлении сертификата например в пользовательские приложения.

Графическое окружение

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

Перед началом работы следует обязательно заполнить Меню -> Реквизиты и проверить корректность настроек в Меню -> Параметры
Скачать утилиту можно с сайта проекта.
Приложение написано на Python, что позволяет использовать его как в Linux, так и в Windows системах.

Комментариев нет:

Отправить комментарий