Используем S/MIME

Иногда возникает необходимость убедиться что автор электронного письма действительно тот, кем вы его считаете, и никто не изменил изначальный текст. Или отправив email убедиться что его прочитает только получатель и те кому позволил прочитать получатель. Две основных проблемы: идентификации авторства и защищённой от прослушивания передачи информации. Обе проблемы решаются с помощью криптографии — первая проблема с помощью цифровой подписи (далее ЭЦП), а вторая с помощью шифрования данных. При симметричном шифровании данных существует проблема передачи ключевой фразы, так как при передачи по не защищённому каналу она может быть перехвачена. В асимметричном шифровании используется пара ключей, один из которых шифрует информацию и второй который расшифрует. Таким образом проблема передачи ключевой фразы пропадает, можно передать всем ключ который шифрует (открытый или публичный) а ключ который расшифрует (приватный или закрытый) оставить у себя и расшифровать информацию сможете только вы. По этой причине для электронной переписки выгоднее использовать асимметричную криптографию.
Наиболее популярными методами асимметричного шифрования и создания ЭЦП есть S/MIME и PGP. Очевидно из названия поста что дальше речь дальше пойдёт о S/MIME. S/MIME поддерживает достаточно большое количество почтовых клиентов — Mozilla Thunderbird, Claws Mail, The Bat!, SeaMonkey, Mutt, Pine, Microsoft Outlook и Microsoft Outlook Express, KMail, Lotus Notes, Novell Evolution, Gnus и другие.
Прежде чем настраивать почтовый клиент нужно получить ключи, для этого можно или сгенерировать самоподписанный ключ, или создать приватный ключ и подписать его в центре сертификации. Второй вариант лучше но для начала рассмотрим первый. Для создания ключей и запроса на подпись будем использовать OpenSSL.

$ openssl req -nodes -newkey rsa:4096 -keyout self_signed.key -out self_signed.crt -x509 -days 1095


Опции -days задают срок действия сертификата, а -newkey алгоритм шифрования и размер ключа. В поле ввода «Common Name» вводите своё имя, а в «Email Address» ваш электронный адрес. В сертификате можно указать также несколько электронных адресов.

$ openssl req -nodes -newkey rsa:4096 -keyout self_signed.key -out self_signed.crt -x509 -days 1095 -subj '/CN=Vasya/emailAddress=vasya@mail.ru/emailAddress=vasya2@gmail.com'

После того как сертификат был создан его надо преобразовать к виду в котором его можно импортировать в почтовый клиент. Вводим команду:

$ openssl pkcs12 -export -in self_signed.crt -inkey self_signed.key -out self_signed.p12

После чего OpenSSL запросит пароль которым будет зашифрован закрытый ключ. Теперь можно удалить файл self_signed.key, файл self_signed.p12 надо импортировать в своём почтовом клиенте, а файл self_signed.crt надо разослать всем людям при переписки с которыми хотите использовать возможности S/MIME. Добавлять самозаверенные публичные ключи в некоторые программы придётся как ключ центра сертификации так как они не принимают самозаверенные ключи.

Намного лучше использовать ключ подписаны каким нибудь авторитетным центром сертификации, вроде VeriSign. В почтовых клиентах есть открытые ключи многих центров сертификации. С помощью них проверяются сертификаты пользователей. Если сертификат пользователя подписан одним из центров сертификации, сертификаты которых добавлены в программу, тогда программа считает что им можно доверять. Центр сертификации, при заверении ключа S/MIME, должен проверить или действительно указанный почтовый адрес принадлежит тому кто отправил запрос на подпись.
Если центр сертификации допускает размещение ещё какой то информации в подписанном ключе, то он должен проверить её правильность и соответствие действительности. Как правило, за оказание своих услуг центры сертификации берут деньги, но сертификаты S/MIME стоят недорого. Например, цена на сертификат для S/MIME от VeriSign стоит 20$ (VeriSign один из самых дорогих и уважаемых центров сертификации). Также есть центры сертификации которые подписывают S/MIME сертификаты бесплатно. Небольшой список популярных центров сертификации которые подписывают S/MIME сертификаты бесплатно:

  • StartCom
  • Secorio — бесплатно только для частного использования, не для бизнеса
  • InstantSSL / Comodo
  • TC TrustCenter — бесплатно только для приватного использования не для бизнеса
  • Verisign — бесплатно как демонстрация на 60 дней.
  • ChosenSecurity — бесплатно не для комерческого использования
  • ipsCA
  • CAcert — корневые сертификаты этого центра сертификации слабо распостраннены. Его корневые сертификаты есть в некоторых дистрибутивах ОС GNU/Linux

Некоторые центры сертификации подписывают сертификаты с разным уровнем доверия, и от уровня доверия зависит цена.
Для примера я покажу как подписать свой ключ в центре сертификации CAcert. CAcert — это некоммерческая организация которая выполняет роль центра сертификации абсолютно бесплатно. СAcert пользуется больше 200 тысяч проверенных пользователей и выдала больше чем 700 тысяч сертификатов. Но корневой сертификат CAcert не так широко распространён, как корневые сертификаты коммерческих центров сертификации. Он включен в некоторые дистрибутивы ОС GNU/Linux, а также велись переговоры о включение его в браузер Mozilla Firefox. Начиная с версии 3.0.2 их сертификат включён в IceCat — форк Firefox который был создан в рамках проекта GNUzilla. По причине малой распространённости сертификаты подписанные CAcert на большинстве программ будут показывать как самозаверенные, так как в этих программах отсутствует корневой сертификат CAcert. Поэтому, если вы хотите использовать сертификаты CAcert в браузере, в котором они не установлены как корневые, то необходимо самостоятельно добавить их. Также это необходимо сделать всем тем, с кем вы собираетесь переписываться используя эти сертификаты, иначе они будут выглядеть для них как самозаверенные. По этой причине вам наверно будет лучше воспользоваться бесплатными сертификатами от StartCom,InstantSSL / Comodo или какого нибудь другого центра сертификации.
Перед тем как зарегистрироваться на сайте CAcert надо установить их коневые сертификаты если они не установлены. Для этого перейдите по адресу http://www.cacert.org/index.php?id=3 и скачайте "Class 1 PKI Key" и "Class 3 PKI Key" в формате PEM. После этого их можно добавить в своей почтовой программе. Например, в Mozilla Thunderbird это можно сделать так: Запустить программу -> "Правка" -> "Настройки".

В появившемся окне выбрать вкладку "Дополнительные" и подвкладку "Сертификаты". Нажать на кнопку "Просмотр сертификатов" и в появившемся окне выбрать вкладку "Центры сертификации". Дальше нажать "Импортировать" и добавить сначала один, а потом и второй сертификат.


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

Теперь можно создать новый ключ и запрос на его подпись.

$ openssl req -nodes -newkey rsa:4096 -keyout key.key -out request.csr -days 1095

Теперь заходим на сайт CAcert.org и выбираем меню "client certificate" и подменю "New". На появившейся странице устанавливаем флажок "Show advanced options" и в появившееся поле ввода надо вставить содержимое файла "request.csr". Нажимаем "Generate Certificate" и получаем подпись ключа.

В результате вы получите подписанный сертификат, который сохраним в файл "cert.crt".
Теперь надо импортировать эти ключи в ваш почтовый клиент. Для этого преобразуем их в формат PKCS12.

$ openssl pkcs12 -export -in cert.crt -inkey key.key -out my.p12

Теперь файл my.p12 можно импортировать в ваш почтовый клиент.
Рассмотрим настройку почтового клиента на примере Mozilla Thunderbird.
Как я уже описывал зайдём в меню управления сертификатами.
Перейдём к вкладке «Ваши сертификаты» и нажимаем на кнопке «Импортировать» и выбираем файл "my.p12".
После этого переходим к настройкам учётных записей. Нажимаем "Правка" -> "Параметры учётной записи" и в нужной учётной записи выбираем "Защита". Теперь можно выбрать ключ для ЭЦП и ключ для шифрования. Можно выбрать один и тот же ключ для ЭЦП и шифрования. Иногда выгоднее для ЭЦП использовать отдельный ключ так как если по постановлению суда вам придётся раскрыть ваш ключ шифрования, ключ от цифровой подписи останется нераскрытым.
Теперь при отправки можно использовать ЭЦП.

Для того что-бы использовать шифрование необходимо иметь публичный ключ получателя письма.
Файл "cert.crt" можете разослать всем тем скем собираетесь переписываться используя S/MIME.
После этих действий можно удалить файл "key.key".

Запись опубликована в рубрике Безопаснось с метками , , . Добавьте в закладки постоянную ссылку.

Один комментарий: Используем S/MIME

  1. Blackster говорит:

    а можно подробнее, как создавать ключи? C помощью утилиты Win32OpenSSL-1_0_1e под Win7 не выходит, не знает она таких команд
    Хотелось бы пошагово узнать, как содавать ключи и с помощью чего…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>