101 прием работы с OpenSSL Anton Karpov Хакер, номер #074, стр. 074-100-4 # chmod 600 myca.key Перед тем, как генерировать запросы и сертификаты, советую взглянуть на openssl.cnf (/etc/ssl/openssl.cnf), в котором прописаны поля сертификата, их обязательность и дефолтные значения. Можешь поменять их, чтобы было проще, или даже указать все значения прямо в запросе (ключ "-subj"). Выпустим сапоподписанный сертификат на сгенерированном ключе: # openssl req -new -x509 -days 365 -key myca.key -out myca.crt Тебе будет задано несколько вопросов касаемо полей сертификата, и в результате ты получишь самоподписанный сертификат ca.crt. Теперь сгенерируем еще один ключ, для Apache: # openssl genrsa -out server.key 2048 Создадим запрос на сертификат (CSR, certificate sign request): # openssl req -new -key server.key -out server.csr Подпишем запрос на ключе CA и выдадим нашему серверу новый сертификат: # openssl x509 -req -days 365 -CA myca.crt -CAkey myca.key -in server.csr -out server.crt # openssl verify -CAfile myca.crt server.crt В процессе работы openssl ищет сертификат CA, CRL и некоторые другие параметры согласно файлу конфигурации /etc/ssl/openssl.cnf. Поэтому неплохо бы его заполнить, это избавит нас в том числе и от ввода параментов "-CA", "-CAkey" и т.д. Так, если ты назвал свою CA MyCA и расположил иерархию каталогов в /etc/ssl, то внеси в конфиг: # vi /etc/ssl/openssl.cnf [ ca ] default_ca = MyCA [ MyCA ] dir = /etc/ssl certs = $dir/crt crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/crt_new certificate = $dir/ca.crt serial = $dir/serial crl = $dir/myca.crl private_key = $dir/myca.key Теперь все будет складываться в /etc/ssl. Например, если мы хотим отозвать сертификат сервера по причине изменения его адреса: # openssl ca -revoke server.crt -crl_reason affiliationChanged Сгенерируем актуальный список отзыва (CRL): # openssl ca -gencrl -out myca.crl В index.txt должна появиться запись о смене статуса сертификата server.crt. Просмотреть же CRL можно следующей командой: # openssl crl -in ca.crl -text -noout Сам сертификат и его ключ можно просмотреть схожим образом: # openssl x509 -in server.crt -noout -text # openssl rsa -noout -text -in server.crt Как настраивать Apache с mod_ssl, написано уже неоднократно, и я повторяться не буду. Но почему-то все ограничиваются банальной поддержкой https, а ведь с сертификатами можно натворить немало забавного. Например, создай папку ssl-area, к которой будут иметь доступ только те, у кого есть выданные тобой сертификаты. Для этого пропиши в конфиг ssl-хоста апача: <Location /ssl-area> SSLRequireSSL SSLVerifyClient require SSLVerifyDepth 1 </Location> Наконец, важное замечание. Теоретически, сертификат - это открытый ключ. И некоторые программы (тот же Apache) разделяют понятия "сертификат" и "закрытый ключ" (и правильно), требуя указать в конфиге и то, и другое. Но некоторый софт, например, vsftpd, хочет найти в сертификате как публичный, так и закрытый ключ. Поэтому, если ты хочешь упростить себе жизнь, или столкнулся с тем, что какая-либо софтина не работает, помни, что ты просто можешь добавить secret key в конец сертификата (командой cat), хотя это, конечно, идеологически неверно. |