Конфигурирование OpenSSL

В операционной системе FreeBSD для шифрования открытым ключом используется пакет OpenSSL. Функциональность OpenSSL использует-

Это чистая правда. И прежде чем вы спросите, я скажу, что я этого не делал! Те самые профессиональные графические станции дал мне мой друг.

ся многими программами, однако системному администратору редко приходится напрямую работать с OpenSSL. Хотя OpenSSL прекрасно справляется со своими обязанностями при настройках по умолчанию, тем не менее я предпочитаю изменять некоторые из них, чтобы упростить себе жизнь. Конфигурация OpenSSL располагается в файле /etc/ ssl/openssl.cnf. Большинство параметров настройки имеют вполне приемлемые значения, и вам не стоит изменять их, если, конечно, вы не являетесь специалистом в области криптографии. Те немногие параметры, которые желательно изменить, отвечают за функции создания криптографических сигнатур. Каждое значение по умолчанию отмечено строкой default. Параметры настройки OpenSSL общего характера, представляющие наибольший интерес, показаны ниже со значениями по умолчанию:

О countryName_default            = AU

© stateOrProvinceName_default = Some-State © 0.organizationName_default = Internet Widgits Pty Ltd

Значение параметра countryName default О – это двухсимвольный код страны. В моем случае – это US. Значение параметра stateOrProvince- Name default © – это название административной области, в которой вы проживаете; может иметь произвольную длину. Я присваиваю этому параметру значение Michigan. Значение параметра 0. organizationNa- me default © – это название компании. Если бы я приобрел подписанный сертификат, тогда здесь я поместил бы название компании, указанное в сертификате. Если вы просто проверяете возможность работы программ с SSL, то можно не указывать настоящее название компании. Я мог бы указать здесь название компании, в которой я работаю, или придумать свое название.

Следующие значения отсутствуют в файле openssl.cnf, но если добавить их, в командной строке OpenSSL они будут отображаться как параметры со значениями по умолчанию. Я считаю следующие настройки полезными, даже при том, что изменять их приходится гораздо чаще, чем предыдущие – для меня они играют роль подсказок.

О localityName_default             = Detroit

© organizationalUnitName_default    = Authorial Division

© commonName_default                = www.absolutefreebsd.com

© emailAddress_default              = mwlucas@absolutefreebsd.com

Значение параметра localityName default О – это название города. Значение параметра оrganizationalUnitName_default © – подразделение компании, для которого был выдан данный сертификат. Следующий параметр OpenSSL, commonName default ©, зачастую становится камнем преткновения для системных администраторов – это имя хоста, как оно отображается при обратном преобразовании имен в DNS (глава 14), для которого был выдан сертификат. Наконец, параметр emailAddress default © – это адрес электронной почты администратора. Все эти значения отображаются в строке приглашения к вводу команды OpenSSL

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

Сертификаты

Интересная особенность шифрования открытым ключом заключается в том, что автор и получатели сообщений необязательно должны быть людьми – это могут быть программы. Безопасная командная оболочка (Secure Shell, SSH) и протокол защищенных сокетов (Secure Sockets Layer, SSL) представляют собой две возможности взаимодействия программ между собой, защищая их данные от просмотра злоумышленниками. Криптография с открытым ключом – это важный компонент цифровых сертификатов (digital sertificates), используемых защищенными вебсайтами и почтовыми службами. Покупая что-нибудь с помощью Fire- fox в режиме онлайн, возможно, вы и не догадываетесь, что броузер неистово зашифровывает и расшифровывает веб-страницы. Вот почему ваш компьютер может пожаловаться на «недействительные сертификаты» (invalid certificates) – когда истек срок действия открытого ключа либо когда используется самозаверяющий сертификат (self-signed).

Многие компании, например VeriSign, предоставляют услуги по заверению открытых ключей. Такие компании называются Certificate Authorities (CAs, центры сертификации). Другие компании, которым необходимо заверить сертификаты, предоставляют доказательства подлинности предоставляемой о себе информации, например корпоративные документы и деловые книги, a Certificate Authority применяет свой сертификат для заверения сертификатов этих компаний. Заверяя сертификат, Certificate Authority говорит: «Я проверил документы этой персоны (организации). Он (или она) является тем, за кого себя выдает». Однако Certificate Authority не гарантирует, что эта персона не применит сертификат для веб-сервера, продающего поддельные или опасные продукты, или для шифрования требования выкупа. Подписанный (заверенный) сертификат гарантирует определенную техническую безопасность, а не персональную честность или одностороннюю техническую безопасность. Сертификаты не являются волшебной таблеткой, обеспечивающей безопасность вашей системы.

В веб-броузерах и других программах, применяющих сертификаты, есть сертификаты основных CAs. Получая сертификат, подписанный Certificate Authority, броузер принимает его. По сути, он говорит: «Я доверяю Certificate Authority, a Certificate Authority доверяет этой компании; следовательно, я буду доверять этой компании». Пока вы доверяете источнику сертификатов, схема работает.

Большинство CAs, предоставляющих услуги по выдаче заверенных сертификатов, являются крупными компаниями. Особняком в этом ряду стоит некоммерческая организация CACert, которая бесплатно предоставляет сертификаты SSL всем, кто может подтвердить свою идентификационную информацию. Популярность CACert растет с каждым

годом, и, хотя корневой сертификат CACert отсутствует в Internet Explorer, в ближайшем будущем я надеюсь увидеть его в Mozilla Firefox.

Для нужд тестирования вполне подойдет сертификат, не заверенный Certificate Authority. Кроме того, незаверенные сертификаты могут использоваться для внутренних нужд компании, где можно установить сертификат в веб-броузер или сообщить пользователям, что данному сертификату можно доверять. Далее мы рассмотрим оба способа.

В обоих случаях использования сертификата необходимо сгенерировать ключ хоста.

Ключ хоста SSL

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

#         openssl genrsa 1024 > host.key

После этого вы увидите сообщение от OpenSSL о том, что создается ключ хоста, и точки, бегущие по экрану, отражающие процесс генерирования ключа. Всего через несколько секунд вы получите файл, содержащий ключ. Это обычный текстовый файл, начинающийся со слов BEGIN RSA PRIVATE KEY, вслед за которыми следует блок случайных символов.

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

#         chown root host.key

#         chmod 400 host.key

Поместите этот ключ в каталог с теми же правами доступа, какие были определены для самого файла.

Создание запроса на получение сертификата

Для получения любого сертификата, как заверенного, так и незаверенного, необходимо создать запрос. Мы не будем углубляться в подробности работы OpenSSL, поэтому мы не будем анализировать работу команды. Перейдите в каталог, где находится ключ хоста, и введите такую команду:

#         openssl req -new -key host.key -out csr.pem

В ответ на экране появятся инструкции и будет задан ряд вопросов. По нажатии клавиши Enter будут вводиться ответы по умолчанию. Если предварительно вы произвели конфигурирование OpenSSL, ответы по умолчанию должны быть верными.

О Country Name (2 letter code) [US]:

(Название страны (2-буквенный код))

© State or Province Name (full name) [Michigan]:

(Название области или края (полное название))

© Locality Name (eg, city) [Detroit]:

(Название местности (например, города))

О Organization Name (eg, company) [Absolute FreeBSD]:

(Название организации (например, компании))

© Organizational Unit Name (eg, section) [Authorial Division]:

(Название подразделения компании (например, отдела))

@ Common Name (eg, YOUR name) [www.absolutefreebsd.com]:

(Принятое имя (например, ВАШЕ имя))

© Email Address [mwlucas@absolutefreebsd.com]:

(Адрес электронной почты)

Двухбуквенные коды стран О определены в стандарте ISO 3166, поэтому вы быстро сможете найти код своей страны в Интернете. Если вы не знаете название области (края, республики) © и города © – спросите у кого-нибудь, кто хотя бы изредка покидает машинный зал. Название организации © – это, скорее всего, название вашей компании, затем следует указать название подразделения или отдела ©. Если вы не работаете, тогда введите свои имя и фамилию или какую-нибудь другую информацию, идентифицирующую вас уникальным образом, а для самозаверенного сертификата здесь вообще можно написать все, что угодно. Различные центры сертификации предъявляют разные требования к заполнению этого поля частными лицами, поэтому обязательно ознакомьтесь с инструкциями центра сертификации.

Принятое имя © оказывается камнем преткновения для большинства системных администраторов. Это не «ВАШЕ» имя, это имя сервера, которое возвращается службой DNS при обратном разрешении имен. Если не указать здесь имя сервера, запрос будет бесполезен.

В качестве адреса электронной почты © я рекомендую использовать общий корпоративный адрес. В этом случае я являюсь Absolute Free- BSD, независимо от того, что бы это могло значить. Не следует указывать адрес электронной почты конкретного сотрудника, который может покинуть компанию по каким-либо причинам.

Please enter the following ‘extra’ attributes to be sent with your certificate request О A challenge password []: © An optional company name []:

(Пожалуйста, введите ‘дополнительные атрибуты’, которые будут

посланы вместе с запросом сертификата

Запрашиваемый пароль []:

Необязательное название организации []:)

Запрашиваемый пароль О также называют идентификационной фразой (passphrase). Повторюсь: он должен храниться в тайне, поскольку тот, кому станет известна ваша идентификационная фраза, сможет использовать ваш сертификат! Использование запрашиваемого пароля является необязательным. Но если вы используете его, вам придется вводить его на каждом запуске сервера, то есть в случае краха веб-сер- вера веб-сайт не будет работать, пока кто-нибудь не введет идентификационную фразу. Я рекомендую использовать идентификационную фразу, но в некоторых случаях это может оказаться неприемлемым. Нажмите клавишу Enter, чтобы использовать пустую идентификационную фразу.

Так как вы уже вводили несколько названий компании, вводить название в третий раз © нет смысла.

После того как вы вернетесь в командную строку, в текущем каталоге появится файл csr.pem. Он выглядит почти так же, как файл с ключом хоста, за исключением того, что в первой строке вместо слов BEGIN RSA PRIVATE KEY находится фраза BEGIN CERTIFICATE REQUEST.

Получение заверенного сертификата

Отправьте файл csr.pem в выбранный центр сертификации, и обратно вы получите файл, который будет очень похож на предыдущие файлы. Сохраните этот файл под именем signature.pem и запустите следующие команды:

#         ср csr.pern cert.pem

#         cat signature.pem » cert.pem

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

Получение самозаверенного сертификата

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

#         openssl х509 -req -days 0365 -in csr.pem -signkey host.key -out ©selfsigned. crt

Signature ok

subject=/C=US/ST=Michigan/L=Detroit/0=Absolute FreeBSD/OU=Authorial Division/ CN=www.absolutetreebsd.com/emailAdd ress=mwlucas@absolutetreebsd.com

Getting Private key

#                  

Вот и все! Теперь у вас есть самозаверенный сертификат, который будет действовать 365 дней О, в файле self signed.crt ©. Этот ключ можно

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

Если вы подписываете собственные сертификаты, клиентские программы будут выдавать предупреждения о том, что «сторона, подписавшая сертификат, неизвестна» (certificate signer is unknown). Ничего удивительного, в конце концов, люди за стенами моего офиса понятия не имеют, кто такой Майкл Лукас и почему он подписывает сертификаты веб-сайта! Компании VeriSign и другие центры сертификации пользуются доверием. Мне доверяют люди, которые меня знают1, но нельзя ожидать, что мне будет доверять весь мир. По этой причине не следует применять самозаверенные сертификаты в системах, где пользователи его увидят, поскольку выдаваемые предупреждения смутят их, раздосадуют или даже отпугнут. Потратьте сотню долларов или около того и получите настоящую СА-подпись своих рабочих сертификатов.

Соединение с портами, защищенными SSL

Я уже говорил, что мы не будем слишком углубляться в использование OpenSSL, и это правда. Однако существует одна особенность, которая слишком удобна, чтобы отказываться от нее; и как только вы узнаете о ее существовании, вы будете пользоваться ею по крайней мере раз в месяц и будет довольны, что она существует.

На протяжении всей книги мы проверяем работу сетевых служб, используя telnet(l) для подключения к портам, с которыми работают демоны, и запуска различных команд. Такой подход хорошо зарекомендовал себя при работе с текстовыми службами, такими как SMTP, РОРЗ и HTTP. Но он непригоден для работы с такими службами, как HTTPS, использующими шифрование. Необходима программа, которая способна выполнять шифрование при работе с такими службами. OpenSSL включает команду openssl s client, которая предназначена именно для такой отладки клиентов. Кроме того, что вам будет доступна масса криптографической информации, вы еще получите возможность запускать текстовые команды и получать ответы. Чтобы установить соединение, команде openssl s_client -connect следует передать имя хоста и номер порта, разделенные двоеточием. Ниже приводится команда подключения к защищенному веб-серверу www.absolutefreebsd.com:

# openssl s_client -connect www.absolutefreebsd.com:443

CONNECTED(00000003) depth=1 /0=VeriSign Trust Network/0U=VeriSign, Inc./

0U=VeriSign International Server CA – Class 3/0U=www.Verisign.com/CPS

Incorp.by Ref.

Вы увидите массу информации о цепочках доверия и ограничении ответственности, а также строки, напоминающие содержимое цифровых

Во всяком случае большинство из них. Многие из них. По крайней мере хоть кто-нибудь из них. Да бог с ними!

сертификатов. После всего этого вы увидите пустую строку без приглашения к вводу. Сейчас вы общаетесь с демоном напрямую. А так как это веб-сервер, попробуем ввести команду HTTP:

GET /

Система ответит:

Object Moved

This document may be found <a href="https://www.nostarch.com/">here</ a>read:errno=0

Эта команда позволяет протестировать защищенные службы так же легко, как и незащищенные.

Некоторые из вас могут задаться вопросом – а зачем тогда шифровать службу, если общаться с ней так просто? Шифрование не защищает демона – шифрование защищает поток данных между клиентом и сервером. Шифрование средствами SSL препятствует просмотру данных обмена посторонними лицами – шифрование не защищает ни клиента, ни сервер. SSL не сможет предотвратить несанкционированное вторжение в ваш компьютер.

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

Источник: ЛукасМ. FreeBSD. Подробное руководство, 2-е издание. – Пер. с англ. – СПб.: Символ- Плюс, 2009. – 864 е., ил.

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

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