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