oscarotero / server-style-guide

Step-by-step instructions to install and configure a web server
https://oscarotero.github.io/server-style-guide
5 stars 2 forks source link

Certificados seguros #4

Closed oscarotero closed 7 years ago

oscarotero commented 7 years ago

Ola, @eusonlito

Segundo este artigo: https://community.letsencrypt.org/t/solved-why-isnt-my-certificate-trusted/2479 recomendan usar separadamente cert.pem e chain.pem:

SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

en vez de como o estamos usando que estan xuntos en fullchain.pem

SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

Sen embargo, parece que non sempre é asi. No meu dominio, teño Ubuntu 16.04 e configurado con fullchain e non ten problema: https://www.ssllabs.com/ssltest/analyze.html?d=oscarotero.com

Pero traballando con @edupoch nun Ubuntu 14.04, sí que daba problemas en móbiles e varios navegadores, polo que ao usar os dous arquivos separados, xa funciona mellor. Aínda así, ten unha valoración inferior: https://www.ssllabs.com/ssltest/analyze.html?d=enmarea.gal

A pregunta é, se iso realmente se debe pola configuración, polo sistema operativo ou hai algun paquete desactualizado.

eusonlito commented 7 years ago

Ben, primeiro temos que entender que un certificado (cert.pem) soamente é unha clave de cifrado para as comunicacións e que contén información sobre quen está cifrando esa comunicación. Esta clave de cifrado pode ser de varios bits, sendo o máis habitual actualmente os de lonxitude 2048 bits con 256 bits de cifrado.

A ese certificado acompáñao de xeito obrigatorio un contrasinal de uso (privkey.pem) que permite definir como se protexe o uso do certificado, ese arquivo pode ter ou non contrasinal, normalmente os certificados non dispoñen de contrasinal xa que iso requiriría introducila cada vez que se reinicia o servidor web que fai uso dese contrasinal. Se é un servizo standalone faría que o servizo quedara detido ata que se introducira, e se non é en modo interactivo, o servizo non arrancaría e daría erro.

De xeito opcional, ese certificado pode incluir un arquivo independente que contén as CAs que validarán ese certificado (chain.pem), ousexa, as empresas que están detras dese certificado para poder validalo como confiable.

Cando xeras un certificado propio non existe ninguna CA que valide a calidade do teu certificado, por iso é polo que os navegadores web dan unha alerta previa.

Estas CAs poden ir dentro do propio certificado principal (fullchain.pem) ou poden ir nese arquivo separado (chain.pem), que vaia xunto ou separado é indistinto para o seu funcionamento. Si te fixas, todos os certificados incluidos en chain.pem tamén están en fullchain.pem, pero sí importa a orde na que aparecen neses arquivos.

Entón, se non ten nada que ver co certificado en sí, cal é o problema?

Pois poden ser varios, e os máis comúns son os métodos de cifrado escollidos para o seu uso, xa que navegadores antigos e móbiles soportan uns e non otros, e seguramente a configuración por defecto de cifrado estea nun modo de métodos de cifrado "duros" e non permita usar métodos máis "blandos". Se recordas, coa configuración SSL de algún dos teus dominios estivemos facendo probas de uso de cifrado SSL para que sexa soportado por cantos máis navegadores/SO posibles intentando comprometer o mínimo posible a dureza do cifrado.

É importante ter en conta que as CAs que poden ser usadas para os certificados en Android e sistemas operativos obsoletos están a pelo nun arquivo do sistema operativo, non se actualizan dinámicamente, isto significa que se hai novas CAs que emiten certificados (Let's Encrypt) e sí son recoñecidas por sistemas/navegadores novos, non serán válidas para sistemas operativos que non se actualicen (Windows XP, Android 4.X e anteriores), xa que son as que teñen nese momento e punto.

Pero sendo que funciona, por que a valoración é inferior? pois iso é un tema directamente relacionado coas versións das librerías SSL do sistema operativo e da compilación desas librerías en Apache, as dúas cousas son directamente dependentes desa nota, coa limitación no uso de métodos de cifrado, coa dureza deses métodos, etc, etc, etc...

No teu caso concreto, parece que é isto que che indica na cabeceira do informe The server does not support Forward Secrecy with the reference browsers. Grade reduced to A-. e que fai referencia a https://blog.qualys.com/ssllabs/2013/06/25/ssl-labs-deploying-forward-secrecy

En calquera caso, non é nada do que preocuparse, xa que A- é unha nota moi boa igualmente.

edupoch commented 7 years ago

Moi boas, @eusonlito

Grazas pola explicación. Creo que queda todo ben clariño. De tódolos xeitos, hai unha cousa que non entendo:

Nun principio, cando introducín na configuración do apache o fullchain.pem, o Chrome non me daba ningún problema, pero tanto o Firefox como os móbiles dicíanme "La conexión no es privada" dando un erro tipo "ERR_CERT_AUTHORITY_INVALID".

Despois o https://www.ssllabs.com/ssltest/analyze.html?d=enmarea.gal dábame unha nota "C" e no apartado "Chain issues" indicaba "Incomplete", coma se a cadea de CAs estivera rota.

Ó substituír o fullchain.pem polo cert.pem e mailo chain.pem deixou de dar este erro e xa todos os navegadores mostraron a web correctamente.

Cres que ten algunha relación ca miña instalación? Pode ser que o fullchain.pem estivera corrupto?

eusonlito commented 7 years ago

Pois pode estar relacionado con como xestiona cada versión de Apache a configuración e os arquivos asociados ós certificados. Creo recordar que Apache 2.4.17 e anteriores precisan certa configuración adicional completa co certificado por unha parte e as entidades CA por outra (SSLCertificateChainFile). Tamén pode ser que o fullchain.pem non estea correctamente xerado, pero vindo de Let's Encrypt dubido que sexa iso.

En calquera caso, xa está solucionado :)

oscarotero commented 7 years ago

Ok. En todo caso, creo que isto solo comezou a fallar cando se creou o certificado para un subdominio, non? Ou fallou de sempre. Digo porque se vai fallar sempre, quería actualizar a guía para que en apache 14.04 se usen os dous arquivos por separado.

edupoch commented 7 years ago

Pois non estou seguro. Eu detecteino cando engadín o novo subdominio. Ocórresevos algún xeito de probalo sen que afecte demasiado a enmarea.gal?

oscarotero commented 7 years ago

https://getback.gal/

Este sitio está instalado nun ubuntu 14.04 con apache e utiliza fullchain. A min nunca me fallou en ningun sitio. Non ten subdominios, pero podo crear un de proba se fai falta. Pero polo que parece tamén ten o chain issues: incomplete (https://www.ssllabs.com/ssltest/analyze.html?d=getback.gal&latest)

oscarotero commented 7 years ago

Ben, acabo de cambiar a configuración para non usar o fullchain, senón os dous arquivos por separado e xa non me da ese erro. Asi que entendo que en ubuntu 14.04 hai que facelo asi.