A autenticação básica do apache pode funcionar bem em uma porta SSL personalizada

2

Isto é para um sistema legado executando o Apache 2.2 e, por várias razões, o servidor seguro não pode ser executado na porta 443 (essa porta é usada por outra coisa). Portanto, ele está configurado para ser executado na porta 8443 e eu tenho essa linha na configuração não SSL que redireciona todas as solicitações para as páginas 'admin' para a conexão segura:

RewriteRule ^/admin(.*)$ https://%{SERVER_NAME}:8443/admin [R=302,L]

Isso funciona bem - se você tentar navegar para:

http://server.com/admin

você é redirecionado corretamente para:

https://server.com:8443/admin

Nesse momento, um formulário de autenticação aparece para efetuar login, com AuthType definido como Digest . Isso parece funcionar bem, mas ao digitar um nome de usuário e senha válidos, o navegador é redirecionado para:

https://server.com/admin
^^^^^             ^

Observe o número da porta ausente. Agora, se você começar digitando o endereço correto no navegador:

https://server.com:8443/admin

então o mesmo formulário de autenticação do apache aparece, mas desta vez após o login, o número da porta é mantido e a página de administração é exibida.

Então, minha pergunta é, sem alterar os números de porta, posso redirecionar a página não-SSL para a página SSL de forma a preservar o número da porta após autenticação? Não consegui encontrar nada na documentação do Auth Digest sobre números de porta, mas presumo que seja algo relacionado com o URI original, seja a partir do pedido do navegador, ou da regra de reescrita.

    
por dsl101 07.10.2016 / 17:09

2 respostas

1

A autenticação básica pode ser feita em qualquer porta. A autenticação básica também faz autenticação para um recurso específico e não envolve nenhum redirecionamento: em vez disso, ele apenas solicita a mesma URL novamente após o diálogo de senha, mas desta vez com credenciais dentro da solicitação de HTTP. Como nenhum redirecionamento está envolvido na autenticação básica, isso significa que o redirecionamento que você vê não é causado pela autenticação, mas é explicitamente configurado em algum lugar da sua configuração.

    
por 07.10.2016 / 17:25
0

Eu criei um caso de teste mínimo, que o que eu acho é a resposta. Por favor, comente se este não é o caso, ou se é apenas uma solução horrível para hackear outra coisa.

Conf SSL não:

<VirtualHost *:80>
    ServerName server.com
    RewriteEngine On

    RewriteRule ^/secret(.*)$ https://%{SERVER_NAME}:8443/secret [R=302,L]
    RewriteRule ^/public(.*)$ https://%{SERVER_NAME}:8443/public [R=302,L]
</VirtualHost>

SSL conf:

LoadModule ssl_module modules/mod_ssl.so
NameVirtualHost *:8443
Listen *:8443

<VirtualHost *:8443>
    ServerName server.com:8443
    UseCanonicalName On
    SSLEngine on

    # SSL cert/key
    SSLCertificateFile /path/to/cert.crt
    SSLCertificateChainFile /path/to/cert.chain.crt
    SSLCertificateKeyFile /path/to/cert.key

    DocumentRoot    "/var/www"

    <Directory "/var/www/public">
      DirectoryIndex index.html index.php
      Options -Indexes FollowSymlinks
      Order allow,deny
      Allow from all
    </Directory>

    <Directory "/var/www/secret">
      DirectoryIndex index.php index.html
      AuthName "Secret Pages"
      AuthType Digest
      AuthUserFile /etc/httpd/test-digests
      Require valid-user
      Options -Indexes FollowSymlinks
      AllowOverride None
      Order allow,deny
      Allow from localhost.localdomain
      Satisfy any
    </Directory>

</VirtualHost>

Observe a linha ServerName na configuração SSL. Se eu não colocar a porta não padrão lá, então o redirecionamento Digest parece usar a porta https padrão 443 depois que o nome de usuário / senha for inserido, o que resulta no comportamento que eu esbocei no documento. pergunta original. Quando a porta estiver lá, o comportamento é o necessário.

Portanto, parece que, pelo menos, se o SSL estiver sendo executado em uma porta não padrão e usando a autenticação do Apache Digest (ou eu acho que Básico), é necessário especificar a porta na configuração do ServerName. Isso é algo que eu não vi na documentação.

    
por 10.10.2016 / 11:33