The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
пользовательские SSL-сертификаты, !*! sek, 18-Мрт-04, 12:47  [смотреть все]
Задача такая: есть Apache+OpenSSL, нужно организовать идентификацию пользователями сервера и наоборот. Для сервера сертификат создал, подписал, все ОК.
Как создать пользовательский сертификат, подписать его (самостоятельно, не прибегая к услугам thawte и проч.) и подсунуть пользовательскому броузеру, дабы идентифицировать этого пользователя. Никак не получается разобраться, и понятной доки найти тоже не могу.
Помогите, плиз, кто может.
  • пользовательские SSL-сертификаты, !*! Xela, 10:53 , 22-Мрт-04 (1)
    >Помогите, плиз, кто может.
    Приблизительно так:

    Настройка Apache и Internet Explorer для работы с SSL по схеме с клиентскими сертификатами.

    NB: Все пути указаны для моей установки. Указаные в этом документе файлы на вашей системе
    могут находиться в другом месте.

    1) Само сабой, устновить на сервер Apache, mod_ssl, openssl.
    2) Настроить апач на работу с mod_ssl:
    для версии 1.3.х:
        добавить в httpd.conf следуюшие строки
        LoadModule ssl_module           extramodules/libssl.so
        AddModule mod_ssl.c
        Include conf/addon-modules/mod_ssl.conf

        Сделать VirtualHost с SSL-ем.

        <VirtualHost 10.123.123.9:443>
            ServerName          my.ssl.server
            ServerAdmin         root@ssl.server
            DocumentRoot        /www/DEFAULT_WEB
            CustomLog           "/var/log/apache/access.log" combined
            ErrorLog            logs/error.log
            SSLEngine           on
            SSLCipherSuite      ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
            SSLCertificateFile  conf/ssl/server.cert.pem
            SSLCertificateKeyFile conf/ssl/server.key.pem
            SSLVerifyClient     require
            SSLVerifyDepth      1
            SSLCACertificateFile conf/ssl/ca.crt
        </VirtualHost>

    3) Создать сертификат для CA и сервера.
        cd /ets/ssl
        Редактируем файл openssl.cnf, добавляя туда следуюшию секцию
        [ srv_cert ]
        basicConstraints=CA:FALSE
        nsCertType = server
        nsComment = "IFC OLMA Generated Sertificate"
        subjectKeyIdentifier=hash
        authorityKeyIdentifier=keyid,issuer:always

        Далее, немного меняем скрипт misc/CA.sh добавляя туда такое действие:
        -newscert)
            # create a certificate
            $REQ -new -x509 -keyout newreq.pem -out newreq.pem -extensions srv_cert $DAYS
            RET=$?
            echo "Certificate (and private key) is in newreq.pem"
            ;;

        В этом же файле указываем в качестве CATOP некий каталог в котором будут
        храниться все сертификаты. В моем случае это /etc/ssl/MY

        Генерим сертификат CA
        cd misc
        ./CA.sh -newca

        После ответов на вопросы и запоминиания пароля, мы получаем CA сертификат в
        $CATOP/cacert.pem

        Сразу же делаем openssl x509 -in $CATOP/cacert.pem -outform DER -out my.cer
        Выкладываем my.cer в доступное место. Этот сертификат будет нужен клиентам, для
        того что бы Explorer не пристывал к ним с глупыми вопросами.

        Далее делаем сертификат сервера.
        ./CA.sh -newscert (замечу, что -newscert это нами добавленое действие)
        Отвечаем на вопросы. Первый спрошеный пароль, это пароль CA, тот, что мы задали
        при генерации сертификата CA. В качестве Common Name указываем имя хоста, в нашем
        случае my.ssl.server
        Получаем сертификат в файле newcert.pem и ключ в newreq.pem                
        Из newreq.pem вырезаем кусок начинающийся с -----BEGIN RSA PRIVATE KEY----- и
        вавляем его в /etc/apache/conf/ssl/server.key.pem. Что бы при старте Apache не
        спрашивал пароль делаем
        openssl rsa -in /etc/apache/conf/ssl/server.key -out /etc/apache/conf/server.key.pem
        Файл newcert.pem копируем в /etc/apache/conf/ssl/server.cert.pem
        В файл /etc/apache/conf/ssl/ca.crt добавляем содержимое $CATOP/cacert.pem
        В последствии, в этот файл помещаем все корневые сертификаты, подписи которых
        мы будем доверять. В данном случае, мы доверяем только себе.

        В этом месте можно запустить apache.

        Созадем клиентский сертификат
        ./CA.sh -newreq
        Отвечаем на вопросы, задаем пароль.
        Подписываем запрос.
        ./CA.sh -sign
        Теперь в newcert.pem и newreq.pem лежат сертификат и ключ клиента.
        Делаем
        openssl pkcs12 -export -in newcert.pem -inkey newreq.tmp -out client1.p12 -name "Наш дорогой клиент"
        На этом шаге вводится сначала пароль, который был задан при генерации запроса,
        а затем пароль, который будет нужен клиенту для установки сертификата.

    4) Настройка Internet Explorer на работу с сертификатми.
        На клиенте, получаем наш my.cer. Предположим, что мы его скачали с обычного нашего
        веба или ftp-сервера. Кликаем на нем два раза и в появившемся окне сертификата
        нажимаем кнопку установить.


        Открываем Explorer. Идем в "Свойства Оборзевателя" на вкладку "Общие". Жмем
        "Сертификаты", затем "Импорт". Указываем наш файлик client1.p12. Вводим
        пароль. И наслаждаемся жизнью.

    Вот собствено и все. Файлы с клиентской машины можно удалить. Они больше не нужны. Если, конечно,
    клиент не будет переставлять оперционку или работать еще на одном компьютере.
    Данная схема конечно не идеальна. Есть еще возможность сделать рутовый сертификат, которым
    подписать сертификат CA, и так далее, и так далее...




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру