The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Авторизация с помощью клиентских сертификатов в Апаче"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Apache, http-серверы)
Изначальное сообщение [ Отслеживать ]

"Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от SHRDLU (ok) on 17-Дек-10, 13:04 
Ситуация следующая.

Есть веб-сервер, работающий по защищенному каналу, в определенные каталоги которого нужно пускать клиентов только при наличии у них персонального сертификата. То есть, на стартовую страничку - зайти по https и почитать информацию можно всем, а в панель управления, лежащую в /cgi-bin/control - только по предъявлению сертификата.

Сделал, как описано в документации апача - http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html#certauth...

В итоге, клиенты что с сертификатом, что без - спокойно попадают в область с ограниченным доступом. В логах никаких ошибок и варнингов при этом нет.

Если директиву SSLVerifyClient require перенести в раздел <VirtualHost> (как сейчас и сделано)- тогда у клиентов появляется запрос сертификата. Но и в корень сервера, соответственно, тоже попасть без сертификата нельзя.

Кто-нибудь решал аналогичную проблему? Куда копать?

OS - FreeBSD 7.2. Конфиг апача ниже:

ServerRoot "/usr/local"

Listen 80

LoadModule authn_file_module libexec/apache22/mod_authn_file.so
LoadModule authn_dbm_module libexec/apache22/mod_authn_dbm.so
LoadModule authn_anon_module libexec/apache22/mod_authn_anon.so
LoadModule authn_default_module libexec/apache22/mod_authn_default.so
LoadModule authn_alias_module libexec/apache22/mod_authn_alias.so
LoadModule authz_host_module libexec/apache22/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache22/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache22/mod_authz_user.so
LoadModule authz_dbm_module libexec/apache22/mod_authz_dbm.so
LoadModule authz_owner_module libexec/apache22/mod_authz_owner.so
LoadModule authz_default_module libexec/apache22/mod_authz_default.so
LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so
LoadModule auth_digest_module libexec/apache22/mod_auth_digest.so
LoadModule file_cache_module libexec/apache22/mod_file_cache.so
LoadModule cache_module libexec/apache22/mod_cache.so
LoadModule disk_cache_module libexec/apache22/mod_disk_cache.so
LoadModule dumpio_module libexec/apache22/mod_dumpio.so
LoadModule include_module libexec/apache22/mod_include.so
LoadModule filter_module libexec/apache22/mod_filter.so
LoadModule charset_lite_module libexec/apache22/mod_charset_lite.so
LoadModule deflate_module libexec/apache22/mod_deflate.so
LoadModule log_config_module libexec/apache22/mod_log_config.so
LoadModule logio_module libexec/apache22/mod_logio.so
LoadModule env_module libexec/apache22/mod_env.so
LoadModule mime_magic_module libexec/apache22/mod_mime_magic.so
LoadModule cern_meta_module libexec/apache22/mod_cern_meta.so
LoadModule expires_module libexec/apache22/mod_expires.so
LoadModule headers_module libexec/apache22/mod_headers.so
LoadModule usertrack_module libexec/apache22/mod_usertrack.so
LoadModule unique_id_module libexec/apache22/mod_unique_id.so
LoadModule setenvif_module libexec/apache22/mod_setenvif.so
LoadModule version_module libexec/apache22/mod_version.so
LoadModule ssl_module libexec/apache22/mod_ssl.so
LoadModule mime_module libexec/apache22/mod_mime.so
LoadModule dav_module libexec/apache22/mod_dav.so
LoadModule status_module libexec/apache22/mod_status.so
LoadModule autoindex_module libexec/apache22/mod_autoindex.so
LoadModule asis_module libexec/apache22/mod_asis.so
LoadModule info_module libexec/apache22/mod_info.so
LoadModule cgi_module libexec/apache22/mod_cgi.so
LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so
LoadModule vhost_alias_module libexec/apache22/mod_vhost_alias.so
LoadModule negotiation_module libexec/apache22/mod_negotiation.so
LoadModule dir_module libexec/apache22/mod_dir.so
LoadModule imagemap_module libexec/apache22/mod_imagemap.so
LoadModule actions_module libexec/apache22/mod_actions.so
LoadModule speling_module libexec/apache22/mod_speling.so
LoadModule userdir_module libexec/apache22/mod_userdir.so
LoadModule alias_module libexec/apache22/mod_alias.so
LoadModule rewrite_module libexec/apache22/mod_rewrite.so

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>

User www
Group www

</IfModule>
</IfModule>

ServerAdmin webmaster@domain.local

ServerName test.domain.local

DocumentRoot "/usr/local/www/open/data"

<Directory />
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

ErrorLog "/var/log/httpd-error.log"

LogLevel warn
#LogLevel debug

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "/var/log/httpd-access.log" combined
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/www/open/cgi-bin/"
</IfModule>

<Directory "/usr/local/www/open/cgi-bin">
    AllowOverride None
    Options None
    Order deny, allow
    Deny from all
</Directory>

DefaultType text/plain

<IfModule mime_module>
    TypesConfig etc/apache22/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

SSLRandomSeed startup file:/dev/urandom 1024
SSLRandomSeed connect file:/dev/urandom 1024

# main site

Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialog  builtin
SSLSessionCache        shmcb:/var/run/ssl_scache(512000)
SSLSessionCacheTimeout  300
SSLMutex  file:/var/run/ssl_mutex

<VirtualHost _default_:443>
    DocumentRoot "/usr/local/www/secure"
    ServerName test.domain.local:443
    ServerAdmin webmaster@domain.local
    ErrorLog /var/log/httpds-error.log
    TransferLog /var/log/httpds-access.log

    <Directory />
        AllowOverride None
        Options FollowSymLinks
        Order Allow,Deny
        Allow from all
    </Directory>

    ScriptAlias /cgi-bin/ "/usr/local/www/secure/cgi-bin/"

    SSLEngine on
    SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
    SSLCertificateFile /usr/local/ssl/server/server.crt
    SSLCertificateKeyFile /usr/local/ssl/server/server.key
    SSLCACertificateFile /usr/local/ssl/ca/ca.crt
    SSLCARevocationFile /usr/local/ssl/db/crl.pem
    SSLVerifyClient require
#    SSLVerifyClient none
    SSLVerifyDepth 1

    SSLOptions +StdEnvVars +ExportCertData +StrictRequire

    <Directory "/www/secure/cgi-bin">

    </Directory>

    <Directory "/www/secure/cgi-bin/control">
#       SSLVerifyClient require
#       SSLVerifyDepth 1
#       SSLOptions +FakeBasicAuth
#       SSLRequireSSL
#       AuthName "Restricted Area"
#       AuthType Basic
#       AuthBasicProvider file
#       AuthUserFile /usr/local/apache2/conf/httpd.passwd
#       Require valid-user
    </Directory>

    BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
    CustomLog /var/log/httpd-ssl_request.log \
    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

    CacheDisable *

</VirtualHost>

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от shadow_alone (ok) on 17-Дек-10, 20:00 
Думаю правильнее, в таком случае, вынести панель управления с домен третьего уровня, типа control.domain.tld, и там уже сделать проверку сертификатов клиентов.
Сертификат на домен, и уровень вложенности его не волнует, так что, IMHO, как Вы задумали это не решить.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от SHRDLU (ok) on 17-Дек-10, 20:28 
> Думаю правильнее, в таком случае, вынести панель управления с домен третьего уровня,
> типа control.domain.tld, и там уже сделать проверку сертификатов клиентов.
> Сертификат на домен, и уровень вложенности его не волнует, так что, IMHO,
> как Вы задумали это не решить.

Мда? То есть, получается, схема с fakebasicauth нефункциональна и неработоспособна в принципе? Но в документации к апачу ведь именно для таких финтов ушами её и расписывают...
За предложение с доменом 3-го уровня спасибо, буду экспериментировать в этом направлении.
Но вот ещё какой вопрос - в перспективе предполагалось организовать так не только доступ в панельку управления, но и проксирование на back-end'ы в локалке... тоже по факту предъявления сертификата. Тут ещё один домен не поможет...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от guest email(??) on 17-Дек-10, 22:25 
Немного (возможно у вас это симлинки) смущают пути
>     DocumentRoot "/usr/local/www/secure"
>     ScriptAlias /cgi-bin/ "/usr/local/www/secure/cgi-bin/"
>     <Directory "/www/secure/cgi-bin">
>     <Directory "/www/secure/cgi-bin/control">
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от SHRDLU (ok) on 17-Дек-10, 22:56 
> Немного (возможно у вас это симлинки) смущают пути
>>     DocumentRoot "/usr/local/www/secure"
>>     ScriptAlias /cgi-bin/ "/usr/local/www/secure/cgi-bin/"
>>     <Directory "/www/secure/cgi-bin">
>>     <Directory "/www/secure/cgi-bin/control">

Это не симлинки. А что именно вас смущает? Чуть покурочил дефолтный конфиг под себя.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от guest email(??) on 17-Дек-10, 23:03 
> Это не симлинки. А что именно вас смущает? Чуть покурочил дефолтный конфиг
> под себя.

Пути смущают, я ж так и написал)
Что бы не смущаться может сделаете у себя https://host/cgi-bin/control/dontexist
и посмотрите в erorr.log где же все-таки апач хочет видеть этот самый dontexist.
Я очень удивлюсь если это будет /www/secure/cgi-bin/control

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от SHRDLU (ok) on 18-Дек-10, 00:03 
> Пути смущают, я ж так и написал)

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

> Что бы не смущаться может сделаете у себя https://host/cgi-bin/control/dontexist
> и посмотрите в erorr.log где же все-таки апач хочет видеть этот самый
> dontexist.
> Я очень удивлюсь если это будет /www/secure/cgi-bin/control

[Fri Dec 17 23:59:37 2010] [error] [client 94.231.130.113] script not found or unable to stat: /usr/local/www/secure/cgi-bin/control/dontexist

?
Честно говоря, с апачем я не на очень короткой ноге. Поэтому не возьму в толк, что тут не так.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от guest email(??) on 18-Дек-10, 09:51 
>> Я очень удивлюсь если это будет /www/secure/cgi-bin/control
> [Fri Dec 17 23:59:37 2010] [error] [client 94.231.130.113] script not found or
> unable to stat: /usr/local/www/secure/cgi-bin/control/dontexist
> Честно говоря, с апачем я не на очень короткой ноге. Поэтому не
> возьму в толк, что тут не так.

Ну как бы это по мягче сказать...
Выше по треду вы писали что это не симлинки.
Разница между /usr/local/www/secure/ и /www/secure такая же, как между /tmp и /usr/sbin.
Как только вы это осознаете и настроите запрос сертификата для правильной папки  (/usr/local/www/secure/cgi-bin/control/) все заработает.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от SHRDLU (ok) on 18-Дек-10, 11:13 
> Как только вы это осознаете и настроите запрос сертификата для правильной папки
>  (/usr/local/www/secure/cgi-bin/control/) все заработает.

Да, ночью до меня дошло, в чем разница, но легче не стало:

    <Directory "/usr/local/www/secure/cgi-bin/control">
        SSLVerifyClient require
        SSLVerifyDepth 1
        SSLOptions +FakeBasicAuth
        SSLRequireSSL
        AuthName "Restricted Area"
        AuthType Basic
        AuthBasicProvider file
        AuthUserFile /usr/local/apache2/conf/httpd.passwd
        Require valid-user
    </Directory>

В итоге при попытке зайти в панель управления - отлуп "Не удаётся завершить защищённую транзакцию", в логе при этом:

[Sat Dec 18 11:09:04 2010] [error] [client 94.231.130.105] Re-negotiation handshake failed: Not accepted by client!?

Опять нескладушки :(

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от guest email(??) on 18-Дек-10, 12:30 
> [Sat Dec 18 11:09:04 2010] [error] [client 94.231.130.105] Re-negotiation handshake failed:
> Not accepted by client!?

Если с сертификатом все ок (проверить можно openssl s_client -host host -port 443 -CAfile name.pem), то это явно проблема ssl а не апача.
Пробуйте поставить уровень логирования в debug для ssl и смотреть что именно ему не нравиться.

В догонку:
помниться в 7.2 как раз что-то сломали на эту тему пытаясь закрыть CVE-2009-3555
погуглите возможно как раз ваш случай.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Авторизация с помощью клиентских сертификатов в Апаче"  +/
Сообщение от SHRDLU (ok) on 18-Дек-10, 14:38 
> В догонку:
> помниться в 7.2 как раз что-то сломали на эту тему пытаясь закрыть
> CVE-2009-3555
> погуглите возможно как раз ваш случай.

Угу. Похоже, что так оно и есть.
Ладно, все равно собирался обновляться до 8.1 - в понедельник разверну на виртуалке, и посмотрю, что там с этим...
Спасибо!

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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