Пройдите проверку подлинности с Клиентским сертификатом SSL ИЛИ основным автором

Из соображений безопасности аутентификация для веб-приложения должна быть перемещена в клиентские сертификаты SSL. Должно быть возможно войти в систему или с именем пользователя/паролем или с SSL. Кроме того, пользователям от интранет нужно разрешить использовать Приложение без дополнительной аутентификации.

Мы попытались реализовать этот сценарий согласно официальной документации, но без успеха.

Вот наша текущая конфигурация

<Directory /opt/app/system/html>
    RedirectMatch permanent ^/$ /exec/login.pl
    Options -Indexes +FollowSymLinks
    SSLVerifyClient optional
    SSLVerifyDepth  2
    SSLRequire      %{SSL_CLIENT_I_DN_O} eq "Company_O"
    SSLOptions      +FakeBasicAuth

    Satisfy     any

    AuthType Basic
    AuthName "Zugriffsschutz"
    AuthBasicProvider file
    AuthUserFile /etc/apache2/htaccess/iapp.passwd
    require valid-user

    Order allow,deny
    Allow from 10.20.0.0/255.255.0.0
    Allow from 10.144.100
</Directory>

С этой конфигурацией даже не требуют клиентский сертификат. Если мы удаляем основную подлинную конфигурацию, аутентификация клиента SSL работает хорошо.

4
задан 3 March 2015 в 14:05
1 ответ

Вопросу три месяца назад, поэтому мой ответ может не понадобиться OP, но он может помочь любому, кому нужна такая конфигурация.

Вопрос помечен как apache-2.4, но конфигурация выглядит как подходящая для 2.2. Это не совсем удивительно, поскольку многие примеры в документации Apache 2.4 кажутся неподходящими для 2.4.

У меня была такая конфигурация, работающая в 2.2 (за исключением «Разрешить от», которая не работала), и переписать на 2.4. Я обнаружил, что для этого нужны некоторые элементы, которые не сразу были очевидны в документации.

Я не даю на это никаких гарантий; он основан на моем файле конфигурации без тестирования. + StrictRequire может не понадобиться в SSLOptions - я не пробовал без него, но он работает таким образом.

В этом отношении, SSLOptions ] может вообще не требоваться - опция + FakeBasicAuth , вероятно, не используется. В моей конфигурации, как только Company_O будет найден в сертификате, доступ будет предоставлен. Насколько я понимаю, + FakeBasicAuth используется с Require valid-user (отдельно), и доступ предоставляется, если DN из сертификата находится в списке пользователей, определенном в AuthUserFile вместе с соответствующим паролем. Моя система не работает таким образом, и я подозреваю, что OP тоже не хотел этого делать.

<Directory /opt/app/system/html>
    RedirectMatch permanent ^/$ /exec/login.pl
    Options -Indexes +FollowSymLinks

    # Anything which matches a Require rule will let us in

    # Make server ask for client certificate, but not insist on it
    SSLVerifyClient optional
    SSLVerifyDepth  2
    SSLOptions      +FakeBasicAuth +StrictRequire

    # Client with appropriate client certificate is OK
    <RequireAll>
        Require ssl-verify-client
        Require expr %{SSL_CLIENT_I_DN_O} eq "Company_O"
    </RequireAll>

    # Set up basic (username/password) authentication
    AuthType Basic
    AuthName "Zugriffsschutz"
    AuthBasicProvider file
    AuthUserFile /etc/apache2/htaccess/iapp.passwd

    # User which is acceptable to basic authentication is OK
    Require valid-user

    # Access from these addresses is OK
    Require ip 10.20.0.0/255.255.0.0
    Require ip 10.144.100
</Directory>

У меня есть

<Directory />
    ...
    Require all denied
    ...
</Directory>

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

Мне потребовалось некоторое время, чтобы заставить это работать, так это то, что казалось, что бит Require expr% {SSL_CLIENT будет работать сам по себе, но в конце концов я понял, что Require ssl-verify- также требовался клиент (см. http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#authzproviders )

8
ответ дан 3 December 2019 в 02:50

Теги

Похожие вопросы