O planejamento de suporte de navegadores é importante na implementação do SharePoint, principalmente para páginas públicas. Uma parte importantíssima dessa implementação é a encriptação por meio de certificados digitais para garantir aos visitantes, usuários e clientes uma troca segura de informações, sem riscos dos dados trafegados serem interceptados ou alterados por terceiros.
O SharePoint suporta atualmente, com algumas pequenas limitações, todos os navegadores principais como Chrome, Internet Explorer, Firefox, Safari e dispositivos móveis. Aparentemente todos os navegadores suportam a utilização do protocolo de comunicação HTTPS, porém existem particularidades no uso dos protocolos de encriptação.
O Firefox, por exemplo, suporta, mas não aceita por padrão os protocolos de encriptação SSL (1.0, 2.0 e 3.0) e TLS (1.0 e 1.1). O único protocolo de fato aceito pelo navegador é o TLS 1.2, conforme a seguinte imagem (Firefox na versão 38):
A abertura das páginas com TLS 1.2 não habilitado ou não suportado na infraestrutura pelo Firefox gera a mensagem “Secure Connection Failed: The Connection to the server was reset while the page was loading”. O conhecimento desse detalhe é importante porque o TLS na versão 1.2 não é habilitado por padrão em todas as versões do servidor Windows e também existem proxies reversos que não suportam o TLS 1.2.
Isto é uma situação complicada para uma página web, já que o Firefox é um dos navegadores mais populares:
Veremos agora em detalhe o que acontece na negociação do protocolo de encriptação entre cliente e servidor.
1. O cliente encaminha um “CLIENT HELLO” para o servidor no IP e a porta obtidos durante o handshake:Veremos agora em detalhe o que acontece na negociação do protocolo de encriptação entre cliente e servidor.
struct {
ProtocolVersion client_version;
Random random;
SessionID session_id;
CipherSuite cipher_suites<2..2^16-1>;
CompressionMethod compression_methods<1..2^8-1>;
Extension client_hello_extension_list<0..2^16-1>;
} ClientHello;
Fonte: RFC 3546Transport Layer Security (TLS) Extensions
Um exemplo do “Client Hello”, requisitando o protocolo TLS 1.2, capturado pela ferramenta Fiddler:
CONNECT URL:443 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
Proxy-Connection: keep-alive
Connection: keep-alive
Host: URL:443
A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.
Version: 3.3 (TLS/1.2)
Random: E8 DA B9 55 D0 3E 7D 3E 48 86 89 EA CF 59 3E AB 60 D3 B0 F4 E1 37 C4 50 D5 E7 69 56 7B 89 B4 CA
“Time”: 30/07/2015 05:06:00
SessionID: empty
Extensions:
server_name NAME
renegotiation_info 00
elliptic_curves secp256r1 [0x17], secp384r1 [0x18], secp521r1 [0x19]
ec_point_formats uncompressed [0x0]
SessionTicket empty
NextProtocolNego empty
ALPN h2-16, h2-15, h2-14, h2, spdy/3.1, http/1.1
status_request OCSP – Implicit Responder
signature_algs sha256_rsa, sha384_rsa, sha1_rsa, sha256_ecdsa, sha384_ecdsa, sha1_ecdsa, sha256_dsa, sha1_dsa
Ciphers:
[C02B] TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
[C02F] TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
[C00A] TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
[C009] TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
[C013] TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA
[C014] TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA
[0033] TLS_DHE_RSA_WITH_AES_128_SHA
[0039] TLS_DHE_RSA_WITH_AES_256_SHA
[002F] TLS_RSA_AES_128_SHA
[0035] TLS_RSA_AES_256_SHA
[000A] SSL_RSA_WITH_3DES_EDE_SHA
2. Vou considerar o IIS com a entidade SERVER para este cenário. Ao receber o “CLIENT HELLO”, o servidor tem acesso às seguintes informações:
-
Endereço IP
-
Número da porta (443)
-
A versão do protocolo solicitado, por exemplo TLS 1.2
-
A lista dos “Cipher Suites”
-
O ID da sessão etc.
O servidor irá agora tentar determinar se há um ponto de extremidade (end point) com o IP e a porta. No caso do IIS o driver TCPIP.SYS move o pacote para a camada HTTP.SYS se a página solicitada existe.
3. O servidor responderá ao cliente com “SERVER HELLO” definido no protocolo mencionado no passo anterior (RFC 3546), se as informações recebidas forem corretas.
struct {
ProtocolVersion server_version;
Random random;
SessionID session_id;
CipherSuite cipher_suite;
CompressionMethod compression_method;
Extension server_hello_extension_list<0..2^16-1>;
} ServerHello;
Os antecessores do TLS, SSL, não garantem mais a segurança prometida: A Google descobriu na última versão 3.0 do SSL a vulnerabilidade “Poodle” e partir desses fatos podemos derivar a boa prática de desabilitar todos os protocolos do SSL e a utilização do TLS como obrigação.
Segue um script de exemplo para habilitar TLS 1.2 no servidor Windows na versão 2008 R2:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
md “HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2”
md “HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server”
md “HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client”
new-itemproperty -path “HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server” -name “Enabled” -value 1 -PropertyType “DWord”
new-itemproperty -path “HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server” -name “DisabledByDefault” -value 0 -PropertyType “DWord”
new-itemproperty -path “HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client” -name “Enabled” -value 1 -PropertyType “DWord”
new-itemproperty -path “HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client” -name “DisabledByDefault” -value 0 -PropertyType “DWord”
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
A empresa Qualys oferece um serviço online gratuito para avaliar a página:
https://www.ssllabs.com/ssltest/
Fontes:
Transport Layer Security
http://de.wikipedia.org/wiki/Transport_Layer_Security
Support for SSL/TLS protocols on Windows
http://blogs.msdn.com/b/kaushal/archive/2011/10/02/support-for-ssl-tls-protocols-on-windows.aspx
Cipher Suites in Schannel
https://msdn.microsoft.com/en-us/library/aa374757(VS.85).aspx
Cipher suite
http://en.wikipedia.org/wiki/Cipher_suite
Como restringir o uso de determinados algoritmos criptográficos e protocolos no Schannel.dll
https://support.microsoft.com/pt-br/kb/245030
TLS/SSL support history of web browsers
http://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers
Web Browser
http://en.wikipedia.org/wiki/Web_browser
[]
David Amenda
Crosspost from SPINTERNALS
MVP, MCSE, MCITP, MCSA, MS