Let's Encrypt es una autoridad de certificación (CA) gratuita, automatizada y abierta, que se ejecuta para el beneficio del público. Los principios clave detrás de Let's Encrypt son:
Los principios clave detrás de Let's Encrypt son gratuitos:cualquier persona que posea un nombre de dominio puede usar Let's Encrypt para obtener un certificado confiable sin costo alguno.
- Gratis: Cualquiera que posea un nombre de dominio puede usar Let's Encrypt para obtener un certificado confiable sin costo alguno.
- Automático: El software que se ejecuta en un servidor web puede interactuar con Let's Encrypt para obtener un certificado sin problemas, configurarlo de forma segura para su uso y encargarse automáticamente de la renovación.
- Seguro: Let's Encrypt servirá como una plataforma para promover las mejores prácticas de seguridad de TLS, tanto en el lado de CA como ayudando a los operadores de sitios a proteger adecuadamente sus servidores.
- Transparente: Todos los certificados emitidos o revocados se registrarán públicamente y estarán disponibles para que cualquiera pueda inspeccionarlos.
- Abierto: El protocolo de emisión y renovación automática se publicará como un estándar abierto que otros pueden adoptar.
- Cooperativa: Al igual que los propios protocolos de Internet subyacentes, Let's Encrypt es un esfuerzo conjunto para beneficiar a la comunidad, más allá del control de cualquier organización.
(fuente:https://letsencrypt.org/about/)
Introducción
Primero, debemos mencionar algunos aspectos oscuros del servicio Let's Encrypt. Por grandiosa que sea la idea de una autoridad de certificación pública y abierta, también trae muchos problemas para nosotros. Los desarrolladores han tratado de hacer que el sistema de obtención de certificados sea lo más simple posible, pero aún requiere una mayor habilidad de administración del servidor. Por lo tanto, muchos desarrolladores como el de ISPConfig (http://www.ispconfig.org/) han implementado esta solución directamente en su. Esto hace que la implementación y la supervisión de todo el sistema sean mucho más fáciles y flexibles.
Complicación real
Muchas personas han decidido implementar Let's Encrypt en sus sitios de producción. Considero que sigue siendo una muy mala idea hacerlo sin ser muy (pero realmente muy) cuidadoso. Let's Encrypt le brinda libertad, pero también lo limita en el uso del certificado con SHA-256 RSA Encryption. El soporte para SHA-256 ha mejorado en los últimos años. La mayoría de los navegadores, plataformas, clientes de correo y dispositivos móviles ya son compatibles con SHA-256. Sin embargo, algunos sistemas operativos más antiguos, como Windows XP pre-SP3, no admiten el cifrado SHA-256. Muchas organizaciones podrán realizar la conversión a SHA-256 sin tener problemas con la experiencia del usuario, y es posible que muchas deseen alentar a los usuarios que ejecutan sistemas más antiguos y menos seguros a actualizarse.
En este tutorial, vamos a tratar esta incompatibilidad de una manera simple, pero desagradable.
Requisitos
- Apache versión 2.4 y superior
- OpenSSL versión 1.0.1e y superior
- Apache mod_rewrite habilitado
La idea completa
Como se mencionó anteriormente, todavía hay dispositivos incompatibles con la firma SHA-256 en Internet. Cuando me vi obligado a implementar un SSL en algunos sitios web, tuve que decidir entre dos opciones:
- Utilizando Let's Encrypt teniendolo gratis pero no para todos.
- Comprar un certificado con firma de 128 bits.
Bueno, todavía la opción no. 1 era la única manera como se le prometió al cliente hace muchos días (:No más teoría:
No más teoría
Espero haber explicado lo necesario y ahora podemos tratar con los espectadores no compatibles de nuestro sitio web. Hay muchas personas que usan máquinas con Windows XP con SP2 e inferior (sí, todavía hay muchas). Así que tenemos que filtrar a estas personas.
En su "/etc/apache2/sites-disponible/your_domain.com.conf" agregue lo siguiente al final del archivo:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !(NT\ 5) [NC]
RewriteRule ^(.*) https:// your_domain.com [R]
RewriteCond obtiene una cadena del encabezado http del invitado que accede a su página. Simplemente puede consultar el suyo y encontrar más información aquí: http://www.useragentstring.com/
La condición que usamos nos dice algo así como "si la cadena no contiene 'NT 5'", entonces RewriteRule ejecuta/aplica la regla de redirigir [R] a la variante https de su dominio, NT 5 es una cadena de versión del sistema operativo para dispositivos con Windows XP .Si no utiliza esta redirección, los usuarios incompatibles no podrán acceder a su sitio web https.
Si no usa esta redirección, los usuarios incompatibles no podrán acceder a su sitio web https. Tengo que advertirle que esta solución no es 100% perfecta como algunas
Tengo que advertirte que esta solución no es 100% perfecta ya que algunos invitados no tienen que proporcionarte información relevante o real. He trabajado con AWstats para averiguar qué tasa de sistemas desconocidos acceden a mi página y es de alrededor del 1,3 %, por lo que son muy pocas solicitudes. Si desea tratar con sistemas operativos desconocidos para garantizar su compatibilidad, también puede agregar unknown en la condición (RewriteCond %{HTTP_USER_AGENT} !(NT\ 5|unknown) [NC]).
Awstats
Después de "no redirigir" con éxito a sus visitantes incompatibles (manteniéndolos en un mundo inseguro de http), puede concentrarse en el lado https.
Configuración HTTPS
Ahora asumimos que ya asignó el certificado a su servidor web y también lo habilitó.
En su archivo de configuración de vhost nuevamente, agregue lo siguiente:
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLProtocol All -SSLv2 -SSLv3
SSLCompression off
SSLHonorCipherOrder On
El CipherSuite utilizado aquí es un poco más largo de lo habitual. Es para una mejor compatibilidad. Puede obtener el suyo en: https://cipherli.st/ o https://mozilla.github.io/server-side-tls/ssl-config-generator/
Debo mencionar nuevamente que nunca obtendrá una configuración perfecta para cumplir con la política de alta seguridad y también la compatibilidad. Deberías encontrar un compromiso.
Después de usar esta configuración, puede probar la configuración y la compatibilidad de su servidor en: https://www.ssllabs.com/ssltest/index.html
Encontrará una larga lista de dispositivos compatibles y los incompatibles, también más información para orientarlo hacia su propia solución "perfecta".