Ao criar uma conexão cliente-servidor, qual é a vantagem de usar o certificado do cliente no lado do cliente? "AuthenticateAsClientAsync".
- É apenas para que possamos identificar que este cliente é um cliente conhecido?
- Adiciona criptografia extra quando o servidor envia dados de volta ao cliente?
- Qual é a desvantagem de não exigir um certificado de cliente
Não consegui encontrar detalhes sobre isso
Mais detalhes sobre o projeto: Esta é a primeira vez que estou trabalhando no meu próprio SslStream. Nunca tive que lidar com isso diretamente. Tenho um cliente que conecta e envia atualizações através de uma conexão de soquete. Eu criei um POC que funciona de algumas maneiras. O servidor apresenta sempre um Certificado para a segurança
sslStream.AuthenticateAsServer(x509Certificate, EnableCertificate, SslProtocols.Tls12, false);
Mas fiz funcionar onde o cliente não precisa apresentar um certificado válido. Tudo funciona.
O certificado do cliente é uma forma de autenticação. Existem outras maneiras, como uma senha. Os certificados de cliente têm a vantagem de serem muito mais fortes: o segredo nunca é trocado. Em vez disso, a prova de posse do segredo (chave privada) é feita assinando dados definidos pelo servidor. Além disso, é resistente contra man in the middle mesmo no nível TLS, ou seja, não terá mais sucesso se houver algum TLS interceptando proxy corporativo ou similar monitorando o tráfego.
Não, trata-se apenas de autenticação. A criptografia fornecida pelo TLS também já deve ser suficiente.
Isso depende do que é usado. Se for necessária uma autenticação forte, mas apenas uma autenticação fraca (senha simples), isso é claramente uma desvantagem.
O uso de certificados de cliente também tem suas desvantagens. Eles precisam ser gerenciados, podem precisar ser substituídos de tempos em tempos, precisam ser entregues de forma segura ao cliente. Esse gerenciamento pode adicionar complexidade.
A autenticação adequada do servidor é essencial para garantir que a criptografia não seja feita com um invasor, mas com o servidor pretendido. A autenticação do cliente (não importa se é certificado ou senha) é um caso de uso diferente: é necessário descobrir quem é o cliente para aplicar o controle de acesso adequado no aplicativo.