The OpenNET Project / Index page

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

Авторизация с помощью клиентских SSL сертификатов. (ssl crypt mod_ssl apache)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: ssl, crypt, mod_ssl, apache,  (найти похожие документы)
From: Алексей Чекушкин Newsgroups: http://www.webscript.ru/ Date: Mon, 20 Dec 2004 18:21:07 +0000 (UTC) Subject: Авторизация с помощью клиентских SSL сертификатов. Оригинал: http://www.webscript.ru/stories/04/05/29/2604693 Авторизация с помощью клиентских SSL сертификатов. Протокол безопасной передачи данных SSL (Secure Sockets Layer) помимо обеспечения безопасной передачи данных позволяет также реализовать авторизацию клиентов на сервере с помощью клиентских SSL сертификатов. Данная статья является практическим руководством по реализации данного вида авторизации. В статье не рассматриваются теоретические основы криптографии или передачи данных по протоколу SSL. Подразумеваемся, что читатель хотя бы поверхностно знаком с понятиями, используемыми в этой статье, такими как сертификат, секретный ключ, подпись сертификата и т.д. Процесс авторизация выглядит следующим образом. При переходе клиента в закрытую область сайта веб-сервер запрашивает у броузера клиента сертификат, если проверка клиентского сертификата веб-сервером прошла удачно, то клиент получает доступ к закрытым данным. Наиболее наглядным примером использования авторизации посредством клиентских сертификатов является система платежей WebMoney Transfer, а точнее реализация WM Keeper Light. Данная схема авторизации признана наиболее надежной и, в том или ином виде, широко используется в сфере предоставления банковских услуг. Практическая реализация рассматривается на основе популярной связки веб-сервера Apache (http://httpd.apache.org/) и модуля mod_ssl (http://www.modssl.org/), основанного на использовании библиотеки openssl (http://www.openssl.org/). Предполагается, что соответствующее программное обеспечение у вас уже установлено. Для реализации процесса авторизации по клиентским сертификатам требуется: 1. Создать собственный доверенный сертификат (Certificate Authority), для того чтобы с помощью него подписывать и проверять клиентские сертификаты. 2. Создать клиентские сертификаты, подписанные доверенным сертификатом, для последующей передачи их клиентам. 3. Сконфигурировать веб-сервер для запроса и проверки клиентских сертификатов. Примечание: Для работы с ключами используется программа openssl, входящая в пакет библиотеки openssl. Все приведенные в статье примеры максимально адаптированы для их выполнения из серверных скриптов при автоматизации процесса выдачи клиентских сертификатов, в частности нигде не используется интерактивный режим. При создании закрытых ключей не используется шифрование ключа, поэтому рекомендуется максимально использовать систему ограничения прав доступа операционной системы на файлы ключей. Создание собственного самоподписанного доверенного сертификата. Собственный доверенный сертификат (Certificate Authority - далее CA) необходим для подписи клиентских сертификатов и для их проверки при авторизации клиента веб-сервером. С помощью приведенной ниже команды создается закрытый ключ и самоподписанный сертификат. # openssl req -new -newkey rsa:1024 -nodes -keyout ca.key -x509 -days 500 \ -subj /C=RU/ST=Msk/L=Msk/O=My\ Inc/OU=Sale/CN=bla/[email protected] \ -out ca.crt Описание аргументов: req Запрос на создание нового сертификата. -new Создание запроса на сертификат (Certificate Signing Request - далее CSR). -newkey rsa:1023 Автоматически будет создан новый закрытый RSA ключ длиной 1024 бита. Длину ключа можете настроить по своему усмотрению. -nodes Не шифровать закрытый ключ (См. примечание выше). -keyout ca.key Закрытый ключ сохранить в файл ca.key. -x509 Вместо создания CSR (см. опцию -new) создать самоподписанный сертификат. -days 500 Срок действия сертификата 500 дней. Размер периода действия можете настроить по своему усмотрению. Не рекомендуется вводить маленькие значения, так как этим сертификатом вы будете подписывать клиентские сертификаты. -subj /C=RU/ST=Msk/L=Msk/O=My\ Inc/OU=Sale/CN=bla/[email protected] Данные сертификата, пары параметр=значение, перечисляются через '/'. Символы в значении параметра могут быть "подсечены" с помощью обратного слэша "\", например "O=My\ Inc". Также можно взять значение аргумента в кавычки, например, -subj "/xx/xx/xx". Описание параметров: С - Двухсимвольный код страны (Country). Необязательный параметр. ST - Название региона/области/края/республики/... (State Name). Необязательный параметр. L - Название города/поселка/... (Locality Name). Необязательный параметр. O - Название организации (Organization Name). Необязательный параметр. OU - Название отдела (Organization Unit). Необязательный параметр. CN - Имя сертификата, при создании серверных сертификатов используется доменное имя сайта, для клиентских сертификатов может быть использовано что угодно (Common Name). Обязательный параметр. Максимальная длина 64 символа. emailAddress - почтовый адрес (E-mail address). Необязательный параметр. Максимальная длина 40 символов. Необязательные параметры могут быть пропущены, например, /C=RU/CN=blabla/[email protected]. -out ca.crt Сертификат сохранить в файл ca.crt. В результате выполнения команды появятся два файла ca.key и ca.crt. Просмотреть данные закрытого ключа и сертификата вы можете с помощью команд: # openssl rsa -noout -text -in ca.key (для ключа) # openssl x509 -noout -text -in ca.crt (для сертификата) Создание клиентских сертификатов Подготовка конфигурации и файлов для подписи сертификатов. Создайте конфигурационный файл с именем ca.config следующего содержания. [ ca ] default_ca = CA_CLIENT # При подписи сертификатов # использовать секцию CA_CLIENT [ CA_CLIENT ] dir = ./db # Каталог для служебных файлов certs = $dir/certs # Каталог для сертификатов new_certs_dir = $dir/newcerts # Каталог для новых сертификатов database = $dir/index.txt # Файл с базой данных # подписанных сертификатов serial = $dir/serial # Файл содержащий серийный номер # сертификата # (в шестнадцатиричном формате) certificate = ./ca.crt # Файл сертификата CA private_key = ./ca.key # Файл закрытого ключа CA default_days = 365 # Срок действия подписываемого # сертификата default_crl_days = 7 # Срок действия CRL (см. $4) default_md = md5 # Алгоритм подписи policy = policy_anything # Название секции с описанием # политики в отношении данных # сертификата [ policy_anything ] countryName = optional # Код страны - не обязателен stateOrProvinceName = optional # ...... localityName = optional # ...... organizationName = optional # ...... organizationalUnitName = optional # ...... commonName = supplied # ...... - обязателен emailAddress = optional # ...... Создайте структуру каталогов и файлов, соответсвующую описанной в конфигурационном файле # mkdir db # mkdir db/certs # mkdir db/newcerts # touch db/index.txt # echo "01" > db/serial Примечание: В файле db/serial записывается текущий серийный номер подписываемого сертификата в шестнадцатиричном формате. В файл db/index.txt сохраняются данные о подписываемых сертификатах. Создание клиентского закрытого ключа и запроса на сертификат (CSR). Для создания подписанного клиентского сертификата предварительно необходимо создать запрос на сертификат, для его последующей подписи. Аргументы команды полностью аналогичны аргументам использовавшимся при создании самоподписанного доверенного сертификата (см. $1), но отсутсвует параметр -x509. # openssl req -new -newkey rsa:1024 -nodes -keyout client01.key \ -subj /C=RU/ST=Msk/L=Msk/O=Inc/OU=Web/CN=usr/[email protected] \ -out client01.csr В результате выполнения команды появятся два файла client01.key и client01.csr. Просмотреть данные закрытого ключа и запроса на сертификат (CSR) вы можете с помощью команд: # openssl rsa -noout -text -in client01.key (для ключа) # openssl req -noout -text -in client01.csr (для запроса) Подпись запроса на сертификат (CSR) с помощью доверенного сертификата (CA). При подписи запроса используются параметры заданные в файле ca.config # openssl ca -config ca.config -in client01.csr -out client01.crt -batch Описание аргументов: ca Подпись запроса с помощью CA. -config ca.config Использовать конфигурационный файл ca.config. -in client01.csr CSR находится в файле client01.csr -out client01.crt Сохранить сертификат в файл client01.crt -batch Не спрашивать подтверждения подписи. В результате выполнения команды появится файл клиентского сертификата client01.crt. Просмотреть данные сертификата вы можете с помощью команды: # openssl x509 -noout -text -in client01.crt Подготовка данных для передачи клиенту. Для передачи полученных в результате предыдущих операций файлов клиенту, обычно используется файл в формате PKCS#12. В этот файл упаковывается и защищается паролем вся информация необходимая клиенту для инсталяции сертификата в броузер. # openssl pkcs12 -export -in client01.crt -inkey client01.key \ -certfile ca.crt -out client01.p12 -passout pass:q1w2e3 Описание аргументов: pkcs12 Работа с файлами формата PKCS#12. -export Экспортирование данных в файл. -in client01.crt Файл клиентского сертификата. -inkey client01.key Файл закрытого ключа. -certfile ca.crt Файл доверенного сертификата. -out client01.p12 Сохранить данные в файл client01.p12. -passout pass:q1w2e3 Установить пароль q1w2e3 на файл (пароль может быть любым, в том числе и пустым) На этом процесс создания клиентского сертификата завершен. Теперь вам необходимо передать клиенту файл client01.p12 и пароль к нему любым удобным безопасным способом, а также проинструктировать его о процедуре инсталяции сертификата в броузер. Для создания новых клиентских сертификатов повторите операции с $2.2. по $2.4. Настройка веб-сервера. Для реализации процесса авторизации по клиентским сертификатам необходимо сконфигурировать веб-сервер для решения следующих задач: 1. Запрет доступа к защищаемой области по протоколу HTTP. 2. Запрос и проверка клиентских сертификатов. Запрет доступа к защищаемой области по протоколу HTTP. Найдите в конфигурационном файле веб-сервера httpd.conf секцию <VirtualHost IP-ADDRESS>, соответсвующую вашему сайту и добавьте в неё следующие директивы <Directory /path/to/secure/area/> SSLRequire </Directory> Описание директив: /path/to/secure/area/ Абсолютный путь до директории защищаемой области. SSLRequire Запрещает доступ клиенту, если при соединении не используется протокол HTTPS (HTTP через SSL). Запрос и проверка клиентских сертификатов. Найдите в конфигурационном файле веб-сервера httpd.conf секцию , соответсвующую вашему сайту и добавьте в неё следующие директивы: SSLCACertificateFile /path/to/ca.crt <Directory /path/to/secure/area/> SSLVerifyClient require </Directory> Описание директив: SSLCACertificateFile /path/to/ca.crt Абсолютный путь до доверенного сертификата (см. $1.). Также в качестве значения директивы SSLCACertificateFile может быть указан файл, содержащий несколько доверенных сертификатов (формируется путем обычной конкатенации файлов сертификатов), тогда все они будут считаться доверенными сертификатами. SSLVerifyClient require При наличии этой директивы веб-сервер будет запрашивать сертификат у клиента в обязательном порядке. Если клиент не предоставляет сертификат, тогда сервер отклоняет запрос. Если клиент предоставляет сертификат, то веб-сервер проверяет его срок действия и поставщика сертификата (сертификат которым он подписан), если сертификат поставщика присутсвует в файле SSLCACertificateFile, то проверка считается успешной и клиенту предоставляется доступ до защищенной области. Для того, чтобы изменения конфигурационного файла веб-сервера вступили в силу необходимо перезапустить веб-сервер # apachectl restart Альтернативные способы настройки веб-сервера. В этом разделе будут рассмотрены альтернативные пути настройки веб-сервера для авторизации по клиентским сертификатам. Вариантов настройки и их комбинаций может быть много, нижеприведенные примеры проиллюстрируют некоторые из них и помогут при разработке собственных конфигураций. Пример 1. Допустим файл указанный в директиве SSLCACertificateFile содержит несколько доверенных сертификатов (см. описание директивы SSLCACertificateFile). Требуется разрешить доступ до защищенной области только владельцам сертификатов, подписанных только одним из поставщиков. <Directory /path/to/secure/area/> SSLVerifyClient require SSLRequire %{SSL_CLIENT_I_DN_O} eq "First CA Inc." </Directory> Описание директив: SSLRequire %{SSL_CLIENT_I_DN_O} eq "First CA Inc." Требует чтобы организацией поставщика клиентского сертификата являлась "First CA Inc.". Аналогичным способом можно проверять любые другие параметры клиентского сертификата или его поставщика. Более подробную информацию о директиве SSLRequire и именах переменных смотрите в документации по mod_ssl. Пример 2. Предположим требуется разрешить доступ до защищенной области владельцам сертификатов со слишком разными данными, настолько, что их сложно описать с помощью директивы SSLRequire. В этом случае полезно использовать метод, основанный на имитации простой авторизации веб-сервером по паролю. <Directory /path/to/secure/area/> SSLVerifyClient require SSLOptions +FakeBasicAuth AuthName "My secure area" AuthType Basic AuthUserFile /path/to/passwd/file require valid-user </Directory> Содержимое файла /path/to/passwd/file /C=RU/L=Msk/O=My Inc./CN=user/[email protected]:xxj31ZMTZzkVA /C=RU/L=Sam/O=My LTD./CN=vas/[email protected]:xxj31ZMTZzkVA /C=RU/L=Zel/O=My LLC./CN=prs/[email protected]:xxj31ZMTZzkVA ........ Описание директив: SSLOptions +FakeBasicAuth Имитирует простую авторизацию веб-сервером. Имя пользователя и пароль не запрашиваются, но сверяются данные клиентского сертификата с данными в файле /path/to/passwd/file. Строка идентифицирующая клиента может быть получена из клиентского сертификата с помощью команды: # openssl x509 -noout -subject -in client.crt Или взята из базы данных db/index.txt, формируемой при подписи CSR (см. $2.). В качестве пароля всегда используется строка "xxj31ZMTZzkVA", являющаяся результатом шифрования строки "password" с помощью алгоритма DES. Отзыв сертификатов. Результат проверки веб-сервером клиентского сертификата будет успешным на весь срок действия сертификата. Возникает вопрос, что делать в случае если вы хотите отказать какому-либо клиенту в доступе по его клиентскому сертификату. Для решения этой проблемы создается список отзыва сертификатов (Certificate Revocation List - CRL). В списке отзыва перечисляются отозванные вами клиентские сертификаты. В соответсвии с этим списком веб-сервер будет отклонять запросы если сертифкат клиента отозван. Создание списка отзыва (CRL). При создании списка отзыва используется тот же конфигурационный файл и таже структура файлов, что и при подписи сертификатов (см. $2.1.), поэтому при выполнении следующей команды вы должны находиться в том же каталоге. # openssl ca -gencrl -config ca.config -out ca.crl Описание аргументов: ca При создании CRL также используется этот аргумент. -gencrl Создание списка отзыва сертификатов. -config ca.config Использовать конфигурационный файл ca.config. -out ca.crl Сохранить созданный список отзыва в файл ca.crl В результате будет создан список отзыва, основанный на базе данных подписанных сертификатах db/index.txt. Так как на данный момент ни один из сертификатов в базе данных не помечен как отозванный, то созданный список будет пустым. Просмотреть данные списка отзыва вы можете с помощью следующей команды. # openssl crl -in ca.crl -text -noout Одной из важных черт списка отзыва является его срок действия, указываемый в конфигурационном файле ca.config с помощью директивы default_crl_days. Также альтернативно может быть использована директива default_crl_hours, если вы планируете часто обновлять ваш CRL. Список отзыва должен обновляться не позже истечения срока действия. Для переодического вызова приведенной выше команды можно использовать cron. Отзыв сертификата. Для того чтобы отозвать клиентский сертификат необходимо пометить его в базе данных сертификатов db/index.txt как отозванный, тогда при следующем обновлении списка отзыва, этот сертификат будет в него включен. Для пометки сертификата как отозванного используйте приведенную ниже команду. # openssl ca -config ca.config -revoke client01.crt Описание аргументов: -revoke client01.crt Отозвать сертификат находящийся в файле client01.crt Настройка веб-сервера После создания списка отзыва сертификатов необходимо дать возможность веб-серверу использовать его. Для этого добавьте приведенную ниже директиву в конфигурационный файл веб-сервера. SSLCARevocationFile /path/to/ca.crl Описание директив: SSLCARevocationFile /path/to/ca.crl Абсолютный путь до файла со списком отзыва сертификатов (см. $4.1.) Не забывайте перезапускать веб-сервер после каждого изменения его конфигурации. # apachectl restart Заключение. Вышеизложенный материал можно дополнять и углублять, цель статьи - минимальное руководство по реализации авторизации по клиентским сертификатам на практике. Любой читатель, имеющий доступ к использовавшемуся программному обеспечению, с помощью этой статьи может за короткое время настроить свой веб-сервер для решения этой задачи. Каждый из изложенных пунктов можно расширить и написать по нему отдельную статью, заинтересовавшиеся читатели могут получить дополнительные сведения в документации по Apache, mod_ssl и openssl. В заключение хочется дать несколько советов по программной реализации вышеописанных процессов. В openssl не предусмотрен механизм блокирования одновременного доступа к ресурсам, то есть, если две программы одновременно будут осуществлять подпись сертификата, то корректность содержимого текстовой базы данных, файла с серийным номером, как впрочем и самого результата не гарантируется. Поэтому необходимо использовать внешний механизм блокировки, например, так это можно реализовать на языке Perl. open ( LOCK, ">/tmp/cert-sign.lck" ) or error_handling(); flock ( LOCK, 2 ) or error_handling(); # ... код, реализующий подпись сертификата ... close( LOCK ); Описанный метод чрезвычайно прост: ставится блокировка на временный файл, выполняются критические действия, снимается блокировка с файла. Если во всех программах, работающих с вашими файлами придерживаться этого метода, то они не смогут в критические моменты вмешиваться в процесс, а будут ждать снятия блокировки. Второй совет связан с извлечением и обработкой данных клиентских сертификатов в CGI-скриптах. При простой авторизации клиента по имени и паролю веб-сервер помещает имя пользователя в переменную окружения REMOTE_USER. Аналогичным образом из переменных окружения можно извлечь данные клиентского сертификата при авторизации по сертификату. Для того чтобы веб-сервер устанавливал значения переменных окружения, относящихся к клиентскому сертификату необходимо добавить в конфигурацию веб-сервера следующую директиву: SSLOptions +StdEnvVars +ExportCertData Описание директив: +StdEnvVars Включает установку в переменные окружения данных, относящихся к SSL. +ExportCertData Включает установку в переменные окружения текста сертификатов использовавшихся при передаче данных. По умолчанию установка переменных окружения, относящихся к SSL, отключена, так как их извлечение из сертификатов влечет за собой снижение быстродействия веб-сервера. Поэтому следует добавлять эти опции только в случае реальной необходимости. Альтернативой переменной REMOTE_USER могут служить следующие переменные: SSL_CLIENT_M_SERIAL - серийный номер клиентского сертификата, SSL_CLIENT_S_DN_CN - имя сертификата (Common Name) или SSL_CLIENT_S_DN - данные сертификата (Subject Name, см. описание аргумента -subj в $1). Если вы хотите использовать переменную SSL_CLIENT_S_DN_CN для идентификации пользователя, то вы должны обеспечить уникальность Common Name для разных сертификатов при создании запросов на клиентский сертификат (см. $2.2.). Уникальность SSL_CLIENT_M_SERIAL и SSL_CLIENT_S_DN гарантируется автоматически при подписи сертификатов. Несколько мелких замечаний от Александр Елисеенко: 1) ключ -sabj при генерации сертификатов явно лишний, все именные данные и так будут запрошены (в интерактиве). Для упрощения жизни можно отредактировать файл openssl.cnf, секция [ req_distinguished_name ]. Тогда останется только жать ENTER. 2) специально создавать файл ca.config нет смысла, дешевле воспользоваться готовым openssl.cnf 3) подробное освещение вопроса генерации сертификатов - дело нужное, но не лишним было бы отметить, что в составе дистрибутива openssl есть готовый скрипт CA (CA.sh или GA.pl), с помощью которого ключи генерятся без всяких проблем (http://www.opennet.me/tips/info/681.shtml) Ну и по вопросу организации проверки клиентских сертификатов на сервере - не все так просто,как написано в статье. Корневой (или доверенный) сертификат может быть не один. Каталог, где они размещены, указывается директивой SSLCACertificatePath. Для каждого доверенного сертификата должен быть указан md5 hash. Все доверенные сертификаты могут быть сгруппированы в один файл (вместе с md5 хэшем, а не путем обычной конкатенации файлов сертификатов), путь к нему в этом случае указывается директивой SSLCACertificateFile. Если используются довереннные сертификаты, подписанные другими CA, то директивой SSLVerifyDepth устанавливается глубина проверки цепочки сертификатов. Алексей Чекушкин отвечает: Суть предыдущего поста можно свести к следующему: "Можно и так и эдак". Не спорю, но 1. В начале статьи есть предложение "Все приведенные в статье примеры максимально адаптированы для их выполнения из серверных скриптов при автоматизации процесса выдачи клиентских сертификатов, в частности нигде не используется интерактивный режим". Ну проще из скрипта вызвать с ключем -subj, чем эмулировать интерактив. 2. А если захочется на других сайтах замутить похожую лабуду, а если это будут делать другие люди и будут не думая править общий openssl.conf. Вообщем лучше максимально себя изолировать от внешних факторов. 3. Есть не спорю. Существуют еще наверное десятки программ, делающих тоже самое. Хотелось показать процесс максимально нативно. 4. md5 hash не "должен" быть указан. Это опционально. Веб-серверу достаточно иметь сам сертификат, из него он "на раз" извлечет md5 hash. И вариант обычной конкатенации доверенных сертификатов работает. О чем между прочим явно указано в документации по директиве SSLCACertificateFile: "Such a file is simply the concatenation of the various PEM-encoded Certificate files, in order of preference." y

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, vitalyopera.ru (?), 16:35, 04/02/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спасибо
    Точно такое же содержимое прочитал на сайте ...ua
    Господа ! Как Вы себе представляете личный ключ, который отдали с сервера клиенту. Вопрос а сколько клиентов его получило ОДИН или ДВА -гарантии нет !
     
     
  • 2.2, dd (?), 17:28, 04/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Гм, а пароль от зашифрованного ключа, который передается клиенту, должен знать только ОДИН :)
     

  • 1.3, Kyxap (?), 00:36, 07/07/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Автору золотую медаль размером с обеденную тарелку
     
  • 1.4, dd (?), 14:35, 29/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Автору золотую медаль и категорическое требование осветить вопрос работы клиентов со смарткартами, а то инфы нету по этому поводу :(
     
  • 1.5, kmn (?), 11:35, 15/11/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я делал ЭТО с apache под виндой (не надо кидать в меня тяжелые предметы, надо было). Так вот, мне пришлось добавить в ca.config секции
    [ req ]
      distinguished_name  = req_distinguished_name
    [ req_distinguished_name ]

    а в httpd.conf
      SSLCACertificateFile ssl/ca.crt

    и только после этого все заработало.
    А директива SSLRequire должна выглядеть как SSLRequireSSL.

    Это особенности работы apache под виндами или неполнота статьи?

     
     
  • 2.10, Noob (??), 23:15, 23/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    >  distinguished_name  = req_distinguished_name
    >[ req_distinguished_name ]
    >
    >а в httpd.conf
    >  SSLCACertificateFile ssl/ca.crt
    >
    >и только после этого все заработало.
    >А директива SSLRequire должна выглядеть как SSLRequireSSL.
    >
    >Это особенности работы apache под виндами или неполнота статьи?

    Если можно расскажите как удалось авторизацию юзеров по сертификатам сделать? (что в каком порядке, если гайд есть буду прыгать от счастья)
    Мудохаюсь с EasyPHP3.0 вроде бы все что надо есть, а в сертификатах запутался наглухо.

     

  • 1.6, Антон (??), 17:41, 01/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня работает только "SSLVerifyClient optional", при "SSLVerifyClient require" в доступе отказывается.
    Только при "SSLVerifyClient optional" клиентский браузер сообщает, что сервер требует предъявить сертификат (если указать на сертификат - всё срабатывает и доступ предоставляется), при "require" отказывают в доступе безо всякого запроса, сразу.
    В чём может быть дело?
     
  • 1.7, lex (??), 13:37, 23/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    указанных директив для httpd.conf недостаточно, во всяком случае у меня начало запрашивать сертификат только после добавления
    SSLEngine On
    SSLCertificateFile
    SSLCertificateKeyFile

    полностью это выглядит так
    <VirtualHost 127.0.0.1>
    SSLEngine On
    SSLVerifyClient require
    SSLCertificateFile ca.crt
    SSLCertificateKeyFile ca.key
    SSLCACertificateFile ca.crt
    DocumentRoot "..."
    </VirtualHost>

     
     
  • 2.8, анонимус (?), 20:08, 23/12/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо за подсказку, а то я голову ломал, какой сертификат засунуть в
    SSLCertificateFile
    и какой ключ в
    SSLCertificateKeyFile
     

  • 1.9, FelixS (??), 07:27, 20/06/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В статье допущен ряд неточностей. В частности, пропущена процедура создания сертификата для сервера (соответственно и его подписи), не совсем правильно указаны директивы в настройке хоста:

    Написано:

    SSLCACertificateFile /path/to/ca.crt
    <Directory /path/to/secure/area/>
      SSLVerifyClient require
    </Directory>

    Необходимо:
    SSLCertificateFile /path/to/server.crt
    SSLCertificateKeyFile /path/to/server.key
    SSLCACertificateFile /path/to/ca.crt
    <Directory /path/to/secure/area/>
       SSLVerifyClient require
    </Directory>

    Более правильный вариант настройки авторизации по клиентским сертификатам описан в "Системном администраторе". Вот ссылка: http://www.samag.ru/cgi-bin/go.pl?q=articles&n=11.2005&a=06

     
  • 1.11, Алексей (??), 18:35, 18/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все кто читал эту статью рано или поздно сталкиваются с проблеммой управления сертификатами. Из командной строки или батника не очень удобно. Сел я и написал прогу webPKI
    Качаем на сатйте: http://alsdx.narod.ru

    Очень приветствую здоровую критику в адрес проги
    ================================================

     
  • 1.12, Лидия (?), 16:28, 27/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ыв
    апвп
     
  • 1.13, lexus (??), 16:18, 18/01/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Отличная статья! От себя добавлю, что чтобы сертификат сервера принимался Java соединениями, нужно добавить PEM Extensions :
    sudo openssl ca -extfile ca/server_ext ... дальше как указано в статье.

    Пример файла server_ext:

    basicConstraints=CA:FALSE
    keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    extendedKeyUsage=serverAuth, clientAuth
    subjectKeyIdentifier=hash
    authorityKeyIdentifier=issuer

     
  • 1.14, soleg (?), 02:39, 13/07/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А можно ли подписывать  клиентские сертификаты купленным сертификатом, скажем от комодо?
     
     
  • 2.20, blbulyandavbulyan (?), 12:28, 29/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Нет нельзя, для подписи нужен ключ от сертификата, а он есть только у CA, в вашем случае у комодо.
     

  • 1.15, Mi Rafaylik (?), 10:05, 19/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Создайте конфигурационный файл с именем ca.config следующего содержания.

    Где его создавать то, точнее где хранить? Ведь сервер его должен увидеть, а для этого он должен находиться в правильной директории - какой именно?

     
     
  • 2.16, Mi Rafaylik (?), 10:37, 19/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Разобрался. Файл ca.config ложится в каталог, который является корневым для выполнения команд терминала
     

  • 1.17, Mi Rafaylik (?), 14:06, 19/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Подскажите - если нет полного доступа настройкам Apache таким как httd.config и т.д. (есть только доступ к админ-панели и возможность работы с .htaccess), то можно ли настроить сервер через .htaccess?
    Пробовал но получил внутреннюю ошибку сервера 500
     
  • 1.18, 111 (??), 08:42, 14/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    помогите разобраться как сертификат клиентский подписать, я не админ и не знаю почему ошибка выскакивает, такой папки пообще нет, номер ошибки рандомный
    .\crypto\bio\bss_file.c

    Using configuration from ca.cnf
    Loading 'screen' into random state - done
    Error opening CA private key ./ca.key
    15944:error:02001002:system library:fopen:No such file or directory:.\crypto\bio
    \bss_file.c:398:fopen('./ca.key','rb')
    15944:error:20074002:BIO routines:FILE_CTRL:system lib:.\crypto\bio\bss_file.c:4
    00:
    unable to load CA private key
    error in ca

     
  • 1.19, 1232231 (?), 17:11, 26/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    После проделанной процедуры, упаковываю файлы в .p12 отправляю файл пользователю, который открывает этот файл и видит ошибку "Этот файл не может использоваться как: Файл обмена личной информацией". В чем может быть проблема??
     
  • 1.21, Кирил (?), 00:12, 24/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как подружить apache2-server+nginx+proxy авторизация с помощью клиентских SSL сертификатов:имееться веб сервер с апачем и модулем рпаф,на нем авторизация с помощью  клиентских SSL сертификатов, а на этот сервер проксируеться vps'ka  nginx.проблема в следущем,при обращений к серверу с апачем напрямую все  работает отлично,но при запросе через проксю(vps nginx) к веб серверу  выдает такую ошибку:Secure Connection Failed
    An error occurred during a connection to . PR_END_OF_FILE_ERROR
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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