A autenticação por HTTPS diminuirá meu aplicativo?


11

Estou construindo um aplicativo Web e um serviço Web RESTful.

Eu tenho lido vários artigos sobre a melhor maneira de autenticar as solicitações para o serviço da web.

A melhor opção para mim parece ser usar a autenticação básica HTTP. Praticamente toda leitura de artigo diz que a autenticação deve ser criptografada em SSL ou equivalente.

Não tenho muita certeza do que isso envolve. Isso significa que todo o meu serviço web terá que estar em um servidor seguro? Isso vai desacelerar as coisas?


Um pensamento, capacidade de coleta de dados carregados por https. Não tenho 100% de certeza se / como isso afetará.

não tenho certeza se eu sigo. Você está dizendo que o cache não é possível?
Gaz_Edge 5/02

Há interações entre ssl / https e o servidor da web que podem não ser desejáveis com o REST - cxf.547215.n5.nabble.com/… - Eu não me aprofundei muito no REST em um ambiente seguro, portanto, isso não foi um problema. problema para mim. É mais de pensamentos e dicas dos meus dias como um administrador apache.

Obrigado. Você diz que não usou o REST em um ambiente seguro. Isso significa que você não está usando autenticação? Ou você está fazendo isso de uma maneira diferente do http basic.
Gaz_Edge

É sem autenticação, básico ou baseado em IP ... e puramente em uma intranet (nada voltado para o exterior).

Respostas:


11

Primeiro, tente entender como a autenticação SSL (HTTPS) e HTTP funciona.

Os métodos de autenticação HTTP usuais (Digest, Basic e qualquer esquema de autenticação baseado em cookies e formulários que você possa implementar sobre HTTP) são todos inseguros por si próprios, porque enviam informações de autenticação mais ou menos em texto não criptografado. Se os dados estão em campos ou cabeçalhos POST e se a codificação base64 é aplicada, não importa a esse respeito, a senha é claramente visível para qualquer pessoa com acesso ao tráfego de rede. Isso significa que a autenticação HTTP em um canal não confiável não vale nada: basta que um invasor leia sua senha é um pouco de cheirar a rede.

O SSL implementa um canal de comunicação seguro em um canal inerentemente inseguro. Isso funciona, grosso modo, da seguinte maneira:

  1. Servidor envia um certificado assinado
  2. O cliente valida o certificado em uma lista de chaves de assinatura em bom estado; as assinaturas de certificado podem ser encadeadas, para que cada nó diga "se a assinatura que me assina é boa, eu também sou", mas, finalmente, a cadeia precisa resolver para uma das poucas autoridades confiáveis ​​pré-configuradas no cliente.
  3. O cliente usa a chave de criptografia pública do servidor para enviar um segredo compartilhado
  4. O servidor descriptografa o segredo compartilhado usando a chave privada (porque apenas o servidor legítimo possui a chave privada, outros servidores não poderão descriptografar o segredo compartilhado)
  5. O cliente envia dados de solicitação reais, criptografados usando o segredo compartilhado
  6. O servidor descriptografa os dados da solicitação e envia uma resposta criptografada
  7. O cliente descriptografa a resposta e a apresenta ao usuário.

Observe alguns pontos importantes aqui:

  • A cadeia de certificados permite que os clientes tenham certeza de que o servidor com o qual estão conversando é o real, não alguém que intercepte suas solicitações. É por isso que você deve comprar um certificado SSL real e por que os navegadores emitem avisos assustadores quando você acessa um site que usa um certificado inválido, expirado ou incorreto: toda a criptografia do mundo não ajuda se você estiver conversando com a pessoa errada.
  • A criptografia pública / privada usada para trocar o segredo garante que a comunicação bem-sucedida funcione apenas entre esse par específico de cliente e servidor: os pacotes de rede detectados serão criptografados e exigirão que a chave privada do servidor obtenha os dados.
  • A criptografia simétrica é usada para a maior parte da solicitação, porque possui uma sobrecarga de desempenho muito menor que a criptografia de chave pública / privada. A chave (segredo compartilhado) é trocada usando criptografia de chave pública / privada, porque essa é a única maneira de fazê-lo de maneira segura (exceto transportando-a por um canal separado, como um serviço de correio).

Então, obviamente, há alguma sobrecarga envolvida, mas não é tão ruim quanto você pensa - é principalmente na escala em que "jogar mais hardware" é a resposta apropriada, a menos que você esteja se preparando para quantidades absolutamente enormes de tráfego ( pense no Google ou no Facebook). Em circunstâncias normais, ou seja, no uso típico de aplicativos da Web, a sobrecarga do SSL é desprezível e, consequentemente, assim que você tiver dados confidenciais, é melhor executar tudo em SSL, incluindo recursos. SSL também é a única maneira viável de proteger o tráfego HTTP; outros métodos simplesmente não são tão padronizados e, portanto, não são amplamente suportados, e você absolutamente não deseja implementar essas coisas sozinho, porque, honestamente, é muito fácil cometer erros.

TL; DR: Sim, a autenticação básica SSL + é uma boa ideia, sim, você precisa de um servidor seguro (e um certificado válido ); sim, isso atrasará um pouco as coisas, mas não, isso não é algo para se preocupar corretamente agora.


12

HTTPS (SSL) não é autenticação de usuário FYI. Ele apenas fornece criptografia entre 2 pontos de extremidade.

Mas sim, há um pouquinho de sobrecarga dele (embora não seja suficiente para justificar uma alteração nos planos / hardware). Veja aqui :

/programming/548029/how-much-overhead-does-ssl-impose


7
Uma melhor ser também assegurar que não é suficiente segura, dada a pequena sobrecarga
Earlz

2
Esta resposta é muito enganadora. SSL é autenticação, geralmente não é autenticação de usuário . O SSL autentica que o servidor com o qual você está falando é realmente quem diz ser. (O trabalho da CA é emitir apenas certificados do facebook.com para o Facebook.) Além disso, o SSL pode fazer autenticação de usuário com certificados de cliente.
Josh3736

@brian: Concordo com josh3736. O SSL fornece autenticação no sentido criptográfico da palavra. Sem autenticação (por exemplo, servidor), você está aberto ao homem nos ataques intermediários. O SSL pode fornecer autenticação segura de cliente (usuário) usando cartões inteligentes ou, se tiver autenticado o servidor, outros meios (por exemplo, nome de usuário / senha) podem ser usados ​​no canal seguro.
Guy Sirton

Realmente, era óbvio que o OP estava perguntando sobre autenticação de usuário e não se preocupando com o cliente autenticando com quem está falando / man nos ataques intermediários. Eu editei o meu post em face de pedantismo grave;) tecnicamente correto é o melhor tipo de correto, afinal
brian

6

Com a autenticação básica HTTP, o nome de usuário e a senha que o usuário fornece são enviados com todas as solicitações ao servidor. Isso significa que eles estão em texto simples, mesmo em áreas do seu site que não precisam necessariamente ser seguras. Obviamente, você desejará SSL aqui para manter seus usuários seguros.

Em teoria, você pode usar a autenticação de cookies e colocar apenas SSL na página de login (para onde o nome de usuário e a senha são enviados). Se seus cookies forem decentemente seguros e protegidos contra ataques de repetição, um invasor não poderá fazer nada com eles, mesmo que eles tenham conseguido obter um.


3

A autenticação básica está configurando um nome de usuário e senha no cabeçalho da solicitação http. Se você não usa SSL ou equivalente, esse nome de usuário e senha são enviados em texto sem formatação e são triviais para qualquer pessoa roubar.

Atualmente, a maioria dos servidores da Web suporta HTTPS pronto para uso e, apesar de adicionar sobrecarga a todas as chamadas, essa sobrecarga é mínima.

Você pode proteger alguns pontos de extremidade e não outros (ou seja, ter um ponto de extremidade autenticado que produza um token que pode ser usado para outras chamadas). Eu recomendaria fortemente o SSL para todo o serviço, embora seja muito mais seguro. (se nada mais impedir que dados confidenciais sejam interceptados)


Sim, acho que parece a melhor ideia. Meu aplicativo da web gerenciará a sessão de usuários, etc., para salvar o token lá. Mas alguém ainda pode bisbilhotar o token para essa sessão, certo? Ainda pode ser um risco para a segurança de dados
Gaz_Edge

Sim em geral. Há coisas que você pode fazer para proteger os cookies (por exemplo, criptografá-los), mas a rota mais simples e eficaz é proteger todo o site. A menos que você tem um caso de uso específico Eu recomendaria a solução mais simples
Tom Squires

2

Jeff Atwood escreveu um breve post no blog há não muito tempo atrás sobre se a criptografia completa é o caminho a percorrer. Ele descreve alguns exemplos do mundo real e também tem algumas linhas sobre considerações de desempenho.

Além disso, ele faz referência a este artigo sobre um estudo de caso do Gmail, citando o seguinte:

Em janeiro deste ano (2010), o Gmail passou a usar HTTPS para tudo por padrão. Anteriormente, havia sido apresentado como uma opção, mas agora todos os nossos usuários usam HTTPS para proteger seus emails entre seus navegadores e o Google, o tempo todo. Para fazer isso, tivemos que implantar nenhuma máquina adicional e nenhum hardware especial. Em nossas máquinas de produção, o SSL / TLS responde por menos de 1% da carga da CPU, menos de 10 KB de memória por conexão e menos de 2% da sobrecarga da rede. Muitas pessoas acreditam que o SSL leva muito tempo na CPU e esperamos que os números acima (públicos pela primeira vez) ajudem a dissipar isso.

Ele também menciona algumas melhorias então recentes no cache de páginas do lado do cliente através de HTTPS pelo navegador .

Apesar disso, ele ressalta, existem outras penalidades, a maioria delas não sendo de desempenho, mas de custos de implementação:

  • Manter a qualidade do software e adicionar complexidade adicional para equipes já ocupadas,
  • O cache de proxy é muito mais difícil de configurar corretamente e também precisa de alterações de código,
  • É difícil obter a segurança certa para um mashup de conteúdo de diferentes fontes,
  • Dispositivos móveis de última geração podem ter problemas com criptografia.

Expanda sua resposta e inclua alguns destaques do blog.
Walter

Destaques da postagem do blog são adicionados.
Daniel Dinnyés

0

A autenticação básica HTTP sem o seu próprio tratamento de sessão provavelmente o deixará aberto a ataques de falsificação de solicitação entre sites. Provavelmente, você pode usá-lo se associar à sua própria manipulação de sessão, mas pode ter problemas para fornecer uma função limpa de "logout".

Não importa o que você usa para autenticação, você precisará usar HTTPS para criptografar a conexão (a menos que o aplicativo da Web seja acessado apenas em uma rede segura e controlada). Isso pode tornar as coisas um pouco mais lentas (os estabelecimentos de conexão são caros, mas os navegadores tendem a manter as conexões por um tempo), mas se você quiser um aplicativo seguro, não poderá evitá-lo de qualquer maneira, para não precisar realmente se preocupar com isso.

Nota: "A autenticação HTTPS" (mencionada no título) é enganosa - pode se referir à autenticação de certificado de cliente SSL, que tem pouco a ver com o texto da sua pergunta e possui seu próprio conjunto de benefícios e problemas. Você provavelmente não quer tocar nisso.


0

Como você vai conseguir a autenticação básica?
Se for um nome de usuário / senha codificado e você estiver usando a funcionalidade incorporada do servidor da Web para fazer isso, provavelmente terá um impacto quase nulo. Se você estiver fazendo coisas loucas em um banco de dados ou algo semelhante, sim, pode haver um impacto.

Como outros já observaram aqui, o SSL e o envio de cabeçalhos extras tecnicamente tornarão as coisas mais lentas, mas não serão significativas de forma alguma.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.