Pinagem do SSL
O SSL Pinning (ou Certificate Pinning) é uma técnica de segurança implementada para assegurar que uma aplicação estabeleça conexões seguras somente com servidores previamente autorizados, através da verificação rígida do certificado digital ou da chave pública utilizada durante a negociação SSL/TLS.
A pinagem do SSL atua como um mecanismo de validação adicional, garantindo que somente o certificado original ou sua chave pública pré configurada seja aceita independentemente das configurações de confiança do sistema operacional, inibindo a captura e modificação das requisições ao backend.
Para configuração Public Key Pinning:
Esta opção define as regras de pinning para domínios especificados.
Suporta dois métodos de pinning, especificados pelo atributo 'type' no elemento <pin>:
1. Public Key Pinning (type="publicKey"):
- Este é o método recomendado e padrão.
- É fixado o hash do Subject Public Key Info (SPKI) do certificado.
- Para gerar o pin: openssl s_client -servername example.com -connect example.com:443 < /dev/null | \
openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | \
openssl dgst -sha256 -binary | openssl enc -base64 2. Certificate Pinning (type="certificate"):
- É fixado o hash do certificado completo.
- Isso é menos flexível, pois qualquer alteração no certificado (mesmo uma renovação com a mesma chave) exigirá a atualização do pin.
- Para gerar o pin: openssl s_client -servername example.com -connect example.com:443 < /dev/null | \
openssl x509 -outform DER | openssl dgst -sha256 -binary | openssl enc -base64 <certificatePinning>
<!-- Habilita a funcionalidade de certificate pinning -->
<enabled>false</enabled>
<!--
O modo pode ser 'strict' ou 'permissive'.
- 'strict': A conexão só será bem-sucedida se pelo menos um pin coincidir. Isso significa que se
o host não estiver configurado ou o pin não coincidir, a conexão falhará.
- 'permissive': Apenas os hosts configurados aplicarão o certificate pinning.
--> <mode>permissive</mode>
<!--
Cada host configura o pinning para um domínio específico. O domínio pode começar com um curinga
(p. ex. *.example.com) para corresponder a todos os subdomínios.
Se múltiplos pins forem especificados para um host, a conexão só será bem-sucedida se pelo menos um dos
pins coincidir (você pode passar múltiplos pins para rotação de certificados, por exemplo).
Nota: Os valores de pin devem ser Base64 do hash SHA256.
-->
<!-- <host domain="*.ident.me">
<pin type="publicKey">OvGTK4nm1z6+DN7WDAo2xjgVK2E53+qVYnocgH2HKcU=</pin>
</host> -->
<host domain="ident.me">
<pin type="certificate">fJJ0rtNgaZFBl1mf6HNQKJufvGAn3Jz6nmigsBrnVLw=</pin>
</host>
</certificatePinning>Atualizado