Cheery
.:МордератоР:. | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Для тех, кто в танке.. сертификат лучше создавать под линухом - там удобнее.. как? http://www.modssl.org/docs/2.8/ssl_faq.html#ToC29 плюс не помню откуда.. всюду, где упоминается файл с расширением .sh есть такой же (насколько помню) с расширением .pl Цитата: Введение Пытаясь настроить кодированное соединение по https-протоколу, чтобы просто не гонять пароли открытым текстом, столкнулась с проблемой - развитие документации, проработка удобства, и чарующая простота не являются свойствами этой технологии. Хотя, вроде всё просто - есть дерево подписей и подписанный сертификат (грубо говоря - визитка сервера, с которым происходит соединение). Вы смотрите дерево подписей и сами думаете, доверяете вы этим подписям или нет. Или же у вас есть копия сертификата и вы сравниваете. В конце концов (и это требуется чаще всего) вам хочется не очень светиться эксклюзивными данными и вам всё равно какие там визитки. Эту простую задачу превратили в монстроидальный набор крючочков и ручечек. Мне понадобилась неделя чтобы, используя иногда по 3 статьи на разных языках одновременно , дойти до решения вопроса (у меня была задача номер три из моего списка Задача Создать конфигурацию виртуального сервера с возможностью подключения по HTTPS-протоколу для более менее безопасной передачи эксклюзивных данных (трафик будет шифроваться). Вопрос начального обмена ключами, который может повлиять на безопасность соединения, я оставлю для самостоятельного изучения, как проблему выходящую за рамки этой статьи. Используемые инструменты FreeBSD-4.7 OpenSSL 0.9.6g Apache/1.3.26 + mod_perl/1.27 Настройка конфигурации OpenSSL В файлике /etc/ssl/openssl.cnf надо проделать следующие изменения: [ CA_default ] dir = . # Это каталог для работы с ssl certs = $dir/ssl.crt # Это где будут лежать сертификаты crl_dir = $dir/ssl.crl # Это где будут листы "отзывов подписей" database = $dir/index.txt # Здесь index file для индексирования запросов на подпись new_certs_dir = $dir/ssl.crt # Сюда будут писать новые сертификаты certificate = $dir/nemesida-ca.pem # Корневой сертификат serial = $dir/serial # Серийный номер запроса crl = $dir/ssl.crl/nemesida.pem # Текущий лист отзывов подписей private_key = $dir/ssl.key/nemesida-ca.key# Секретный ключ для основного сертификата RANDFILE = $dir/ssl.key/.rand # Я так и не нашла, как обойти эти вещи заданием ключей, так что придётся править конфиг. Создаём "корневой" сертификат Для удобства, перейдём в каталог с конфигурацией Apache, где у меня располагаются подкаталоги с искомыми сертификатами: # cd /usr/local/etc/apache Корневой сертификат является корнем дерева подписей и является как бы самой ГЛАВНОЙ подписью. Секретный ключ (он нужен для того, чтобы можно было воспользоваться вашим корневым сертификатом для подписи остальных) и сертификат создаются одной командой: # openssl req -config /etc/ssl/openssl.cnf -new -x509 -keyout ssl.key/nemesida-ca.pem -out nemesida-ca.pem -days 3650 Вас спросят пароль - введите и запомните его. Все остальные поля заполняйте так, как вам подскажет сердце. Снимите пароль с ключа: # openssl rsa -in ssl.key/nemesida-ca.pem -out nemesida-ca.key Если вы не сможете спасти этот ключ от посягательств, то и пароль вам не поможет. Что делает эта строка, я затрудняюсь ответить точно, но так сделать рекомендуют: # openssl x509 -in nemesida-ca.pem -out nemesida-ca.crt Вот и всё - главная подпись, т.е. корневой сертификат, у вас есть. Он подписан сам собой. Подготавливаем площадку Следующие действия, которые надо не забыть совершить, вызывают у меня бурный восторг. Следует создать два файла с некоторой индексной информацией, создать которые openssl не может, равно как и выдать разумное сообщение по этому поводу. Создадим индексный файл (ключевое слово database из openssl.cnf): # touch index.txt Создадим файл серийных номеров (ключевое слово serial из openssl.cnf): # echo '01' > serial Этот файл должен содержать две цифры (обязательно). Если вы ещё не создавали никаких сертификатов кроме корневого, файл должен содержать 01. Создаём сертификат сервера Создание сертификатов сервера состоит из процедуры создания запроса на попись, а затем подписания этого запроса в отличии от создания самоподписанного корневого сертификата. Создаём запрос на подпись нового сертификата и создаём секретный ключ к нему: # openssl req -config /etc/ssl/openssl.cnf -new -keyout ssl.key/nemesida.pem -out ssl.csr/nemesida.pem Вводя даные, учтите, что поле Common Name должно содержать полностью определённое доменное имя (FQDN) того сайта, где вы будете использовать https-протокол, чтобы броузеры не выдавали предупреждения о неверности имени. Снимите пароль с ключа: # openssl rsa -in ssl.key/nemesida.pem -out nemesida.key Подпишите запрос (подписка запроса и есть создание нового сертификата) своим корневым сертификатом: # openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -out ssl.crt/nemesida.pem -infiles ssl.csr/nemesida.pem Подготовьте сертификат к использованию: # openssl x509 -in ssl.crt/nemesida.pem -out ssl.crt/nemesida.crt Списки запросов Создайте на всякий случай список запросов (там будут храниться и данные по отзывам подписей, если вам это когда-либо понадобится): # openssl ca -gencrl -out ssl.crl/nemesida.pem Настройка Apache В файле httpd.conf (сами найдите ваш файл конфигурации) прописываем: NameVirtualHost *:443 DocumentRoot "/home/nemesida/www" ServerName nemesida.ru ScriptAlias /cgi-bin/ /home/nemesida/cgi-bin/ SSLEngine on SSLCertificateFile /usr/local/etc/apache/ssl.rt/nemesida.crt SSLCertificateKeyFile /usr/local/etc/apache/ssl.key/nemesida.key SSLCACertificateFile /usr/local/etc/apache/nemesida-ca.crt SSLCARevocationFile /usr/local/etc/apache/ssl.crl/nemesida.crl SSLOptions +StdEnvVars SSLOptions +StdEnvVars SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 Вот собственно и всё. Запускаете Apache и проверяете. Замечания Пока вы не разберётесь в работе SSL, нельзя считать соединение безопасным. В данном случае представлен быстрый вариант настройки, не дающий никаких гарантий. Практически - это защита от дурака, которой тоже пренебрегать не следует. Берегите секретные ключи - иначе вся эта мышиная возня не имеет смысла. Поддержка виртуальных хостов "name based" возможна не в полном варианте - сетрификат вы не сможете сделать различными для разных "name based" виртуальных хостов. Это связано с тем, что сначала устанавливается SSL-туннель, а затем по нему идёт обмен данными, что определяет выбор сертификатов до получения HTTP-запроса. | вот еще способ.. Цитата: hagbard@fnord:~/certs$ /usr/local/ssl/misc/CA.pl -newca CA certificate filename (or enter to create) Making CA certificate ... Using configuration from /usr/local/ssl/openssl.cnf Generating a 1024 bit RSA private key ...............++++++ ......................................++++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying password - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:California Locality Name (eg, city) []:Sebastopol Organization Name (eg, company) [Internet Widgits Pty Ltd]:Illuminatus Enterprises, Ltd Organizational Unit Name (eg, section) []:Administration Common Name (eg, YOUR name) []:Hagbard Celine Email Address []:hagbardceline1723@yahoo.com Congratulations. You're the proud owner of your very own Certificate Authority. Take a look around: hagbard@fnord:~/certs$ ls demoCA/ hagbard@fnord:~/certs$ cd demoCA/ hagbard@fnord:~/certs/demoCA$ ls -l total 24 -rw-r--r-- 1 rob users 1407 Sep 8 14:12 cacert.pem drwxr-xr-x 2 rob users 4096 Sep 8 14:12 certs/ drwxr-xr-x 2 rob users 4096 Sep 8 14:12 crl/ -rw-r--r-- 1 rob users 0 Sep 8 14:12 index.txt drwxr-xr-x 2 rob users 4096 Sep 8 14:12 newcerts/ drwxr-xr-x 2 rob users 4096 Sep 8 14:12 private/ -rw-r--r-- 1 rob users 3 Sep 8 14:12 serial The public key for your new Certificate Authority is contained in cacert.pem, and the private key is in private/cakey.pem. You can now use this private key to sign other SSL certs. To use your CA's authority to sign SSL certs, you'll need to make a new cert that a web server (such as Apache) can use. First, generate a private key and certificate request (see man CA.pl or my book, Linux Server Hacks). Now you can sign the new request with your own CA's key: hagbard@fnord:~/certs$ openssl ca -policy policy_anything \ -out propaganda.discordia.eris.crt \ -infiles propaganda.discordia.eris.csr Using configuration from /usr/local/ssl/openssl.cnf Enter PEM pass phrase: Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows countryName RINTABLE:'US' stateOrProvinceName RINTABLE:'Texas' localityName RINTABLE:'Mad Dog' organizationName RINTABLE:'Discordia, Inc.' organizationalUnitName:PRINTABLE:'Operations' commonName RINTABLE:'propaganda.discordia.eris' emailAddress :IA5STRING:'hail@discordia.eris' Certificate is to be certified until Sep 8 22:49:26 2003 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Now, to use the .crt and .key with Apache + mod_ssl (or Apache-ssl), install them as you normally would (perhaps with lines like these): SSLCertificateFile /usr/local/apache/conf/ssl.crt/propaganda.discordia.eris.crt SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/propaganda.discordia.eris.key |
|