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):
| Firefox: About:Config - TLS Fallback desabilitado | 
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.
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". 
|  | 
| "Secure Connection Failed: The Connection to the server was reset while the page was loading" | 
Isto é uma situação complicada para uma página web, já que o Firefox é um dos navegadores mais populares:
|  | 
| Fonte Wikipedia: Fatia de uso de navigadores. | 
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:
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;
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:
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:
Fontes:
Transport Layer Security
Support for SSL/TLS protocols on Windows
Cipher Suites in Schannel
Cipher suite
Como restringir o uso de determinados algoritmos criptográficos e
protocolos no Schannel.dll
TLS/SSL support history of web browsers
Web Browser

 
Nenhum comentário:
Postar um comentário