Permitindo que usuários entrem de um endereço IP sem autenticação de cliente de certificado

5

Eu preciso permitir o acesso ao meu site sem certificados SSL da rede do meu escritório e com certificados SSL externos.

Aqui está minha configuração:

 <Directory /srv/www>
  AllowOverride All

  Order deny,allow
  Deny from all
  # office network static IP
  Allow from xxx.xxx.xxx.xxx

  SSLVerifyClient require
  SSLOptions +FakeBasicAuth
  AuthName "My secure area"
  AuthType Basic
  AuthUserFile /etc/httpd/ssl/index
  Require valid-user
  Satisfy Any

 </Directory>

Quando estou dentro da rede e tenho certificado - posso acessar. Quando estou dentro da rede e não tenho certificado - não consigo acessar, requer certificado.

Quando estou fora da rede e tenho certificado - não consigo acessar, ele me mostra a tela básica de login Quando estou fora da rede e não tenho certificado - não consigo acessar, ele me mostra a tela básica de login

e a configuração a seguir funciona perfeitamente

 <Directory /srv/www>
  AllowOverride All

  Order deny,allow
  Deny from all
  Allow from xxx.xxx.xxx.xxx

  AuthUserFile /srv/www/htpasswd
  AuthName "Restricted Access"
  AuthType Basic
  Require valid-user
  Satisfy Any

 </Directory>
    
por John 27.07.2012 / 16:42

3 respostas

8

Aqui está como eu implementei isso (xxx.xxx.xxx.xxx - permitir acesso para este endereço sem cert):

  SSLVerifyClient optional
  SSLOptions -FakeBasicAuth +StrictRequire -StdEnvVars -ExportCertData
  SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128

  RewriteEngine on
  RewriteCond %{SSL:SSL_CLIENT_VERIFY} !^SUCCESS$
  RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx$
  RewriteRule   ^  -  [F]

Observe que o SSLVerifyClient NÃO deve estar no contexto do diretório:

In per-directory context it forces a SSL renegotiation with the reconfigured client verification level after the HTTP request was read but before the HTTP response is sent.

    
por 31.08.2012 / 16:53
1

Presumivelmente, dentro da sua rede, o servidor tem um IP (interno, privado) diferente do que quando acessado de fora.

Nesse caso, seria mais simples configurar dois vhosts - um em in.ter.nal.ip: 443 e outro em ex.ter.nal.ip: 443.

Exigir certificados de cliente apenas no vhost externo.

    
por 27.07.2012 / 16:56
0

Fiquei surpreso ao descobrir que isso funciona no Apache 2.4:

<LocationMatch "^/some/secure/place">
    <If "! -R 'xxx.xxx.xxx.xxx/32'">
            SSLRequireSSL
            SSLVerifyClient require
            ...etc
    </If>
</LocationMatch>
    
por 13.03.2018 / 09:10