Como melhorar a segurança do Certificado SSL no servidor

A segurança do servidor é algo bem delicado e deve ser tratado com cautela. Existem diversos recursos para te auxiliar como Firewall, IDS e outros. O Certificado SSL também é um deles, mas existem algumas recomendações a serem seguidas antes de habilitar uma conexão SSL/TLS no servidor.

Apesar do termo SSL ser muito usado na internet os servidores não usam mais este protocolo (ou pelo menos não deveriam), o correto é usar o protocolo TLS (no link abaixo explica o porque).

Quer saber a diferença entre o SSL e o TLS? Acesse este ink.

Então é necessário verificar se o servidor está configurado com os protocolos e conjuntos de cifras recomendados. Abaixo vou te passar algumas recomendações de serviços como IIS, Apache (mod_ssl) e Apache tomcat.

Recomendações para o Microsoft Internet Information Services (IIS)

Altere os protocolos SSL e os conjuntos de cifra (Conteúdo em inglês). Esses tipos de alteração envolvem fazer modificações no registro.

Desabilitando SSLv2, SSLv3 e TLSv1. Contém um Microsoft Fix It para facilitar o processo:

https://support.microsoft.com/en-us/help/187498/how-to-disable-pct-1.0,-ssl-2.0,-ssl-3.0,-or-tls-1.0-in-internet-information-services (Conteúdo em inglês).

Restringindo algoritmos e protocolos criptográficos:

https://support.microsoft.com/en-us/help/245030/how-to-restrict-the-use-of-certain-cryptographic-algorithms-and-protocols-in-schannel.dll (Conteúdo em inglês).

Recomendações para Apache / mod_ssl

Alta segurança, somente TLSv1.2. Pode não ser compatível com todos os navegadores e dispositivos.

O protocolo SSL e o conjunto de cifra abaixo são destinados apenas a troca de informações de alta segurança entre o servidor e cliente (website e navegador). Mas para que funcione corretamente o usuário precisa usar um navegador recente (Firefox > 27, Chrome > 32, IE > 11).

SSLProtocol all -TLSv1.1 -TLSv1 -SSLv2 -SSLv3
SSLCipherSuite ALL:+HIGH:!ADH:!EXP:!SSLv2:!SSLv3:!MEDIUM:!LOW:!NULL:!aNULL
SSLHonorCipherOrder on

Média segurança. Oferece segurança e compatibilidade.

O protocolo SSL e o conjunto de cifra abaixo são destinados apenas a troca de informações de média segurança entre o servidor e cliente.

SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:+HIGH:+TLSv1:!ADH:!EXP:!SSLv2:!MEDIUM:!LOW:!NULL:!aNULL
SSLHonorCipherOrder on

Java Security Socket Extension para Apache Tomcat

O Apache Tomcat usa o conector JSSE por padrão, como oposição ao Apache Portable Runtime (APR). Abaixo estão alguns conjuntos de cifra recomendados.

ciphers="TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA256,
TLS_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"

Exemplo de configurações do conector JSSE no arquivo $ TOMCAT_BASE / conf / server.xml

<Connector port = "8443" protocolo = "org.apache.coyote.http11.Http11Protocol" 
 maxThreads = "150" SSLEnabled = esquema "verdadeiro" = "https" seguro = " 
 verdadeiro " clientAuth = "falso" sslProtocol = "TLS" sslEnabledProtocols = "TLSv1.2, TLSv1.1, TLSv1" 
 keyStoreFile = "/ path / to /" keystore.jks 
 keystorePass = "keystorepasswordhere" 
 cifras = "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, 
 TLS_RSA_WITH_AES_128_CBC_SHA, 
 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 
 TLS_RSA_WITH_AES_128_CBC_SHA256,
 TLS_RSA_WITH_AES_128_GCM_SHA256, 
 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 
 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 
 TLS_RSA_WITH_AES_256_CBC_SHA, 
 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 
 TLS_RSA_WITH_AES_256_CBC_SHA256, 
 TLS_RSA_WITH_AES_256_GCM_SHA384, 
 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, 
 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" 
 />TLS_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" />TLS_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" />/>/>

Apache Tomcat com conector de tempo de execução portátil Apache (Apache Portable Runtime)

SSLProtocol = "all -SSLv2 -SSLv3"
SSLCipherSuite = "ALL: + HIGH: + TLSv1:! DH:! ADH:! EXP:! SSLv2:! MEDIUM:! LOW:! NULL:! ANULL"
SSLHonorCipherOrder = "on"

Exemplo de configurações do conector APR no arquivo $ TOMCAT_BASE / conf / server.xml

<! - Conector APR -> 
      <Protocolo do conector = "org.apache.coyote.http11.Http11AprProtocol" 
                 porta = "8443" maxHttpHeaderSize = "8192" 
                 maxThreads = "150" 
                 enableLookups = "falso" disableUploadTimeout = "true" 
                 acceptCount = "100" esquema = "https" seguro = " 
                 verdadeiro " SSLEnabled = " 
                 verdadeiro " SSLCertificateFile = "/ caminho / para / certificate.cer" 
                 SSLCertificateKeyFile = "/ caminho / para / private.key" 
                 SSLCertificateChainFile = "/ caminho / para /intermediário/certificate/bundle.cer " 
                 SSLProtocol ="Todos -SSLv2 -SSLv3 " 
                 SSLCipherSuite =" ALL: + HIGH: + TLSv1:! DH :! ADH:! EXP:! SSLv2:! MEDIUM:! LOW :! NULL:! ANULL "    
                 SSLHonorCipherOrder =" on " 
 />

Recomendo você testar o Certificado SSL antes e depois de fazer as configurações no servidor. Assim poderá ter uma noção de como foi melhorada a segurança do SSL no servidor.

Se você gostou deste conteúdo, peço que ajude mais pessoas a entenderem a melhorarem a segurança do SSL/TLS no servidor, compartilhando este artigo com seus amigos.

Caso tenha alguma dúvida a sobre o assunto, por favor deixe seu comentário que terei o prazer de conversar com você a respeito.

Um grande abraço e até a próxima!