certificado do cliente apache if-else condition

2

Eu tenho um <Location> em um host virtual que se parece com isso:

  <Location /app1/>
    SSLVerifyClient require
    SSLVerifyDepth 2
    SSLRequireSSL
    SSLOptions +OptRenegotiate
    SSLCipherSuite HIGH
    SSLRequire %{SSL_CLIENT_S_DN_OU} eq "Customer1" \
    or %{SSL_CLIENT_S_DN_OU} eq "Customer2" \
    or %{SSL_CLIENT_S_DN_OU} eq "Customer3"
 </Location>

Isso exige que todos que desejam acessar / app1 / apresentem um certificado de cliente ao servidor. Servidor de back-end é tomcat.

É possível "encaminhar" visitantes que não se autenticam em um local diferente de visitantes que possuem um certificado? Por exemplo. os que não possuem certificado recebem menos funcionalidades ...

Obrigado

    
por zero_r 12.07.2011 / 13:33

1 resposta

3

Você pode usar o mod_rewrite para enviar pessoas para outro lugar.

Em primeiro lugar, você deve configurar o seu Apache para que ele permita que pessoas sem um certificado entrem (por exemplo, use SSLVerifyClient optional ). Observe que isso pode quebrar com determinados navegadores. Verifique isso antes de ir ao vivo.

Então, como segundo passo, você pode usar o mod_rewrite assim:

RewriteEngine On
# Only match requests which don't have a proper client certificate
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !SUCCESS

# Prefix the URL for those people with /guest
RewriteRule ^/(.*)$ /guest/$1
    
por 12.07.2011 / 16:52