Habilita HTTPS en tus servidores

Chris Palmer
Chris Palmer

En esta página, se brinda orientación para configurar HTTPS en tus servidores, incluida la los siguientes pasos:

  • Crear un par de claves públicas/privadas de RSA de 2,048 bits
  • Generar una solicitud de firma de certificado (CSR) que incorpore tu clave pública
  • Compartir tu CSR con tu autoridad certificadora (AC) para recibir una certificado o una cadena de certificados.
  • Instalar el certificado final en un lugar al que no se pueda acceder a través de la Web, como /etc/ssl (Linux y Unix) o donde lo requiera IIS (Windows)

Genera claves y solicitudes de firma de certificados

En esta sección, se usa el programa de línea de comandos openssl, que incluye la mayoría Linux, BSD y Mac OS X, para generar claves privadas y públicas, y una CSR.

Genera un par de claves pública/privada

Para comenzar, genera un par de claves RSA de 2048 bits. Una clave más corta se puede romper con los ataques de fuerza bruta y las claves más largas utilizan recursos innecesarios.

Usa el siguiente comando para generar un par de claves RSA:

openssl genrsa -out www.example.com.key 2048

Obtendrá el siguiente resultado:

Generating RSA private key, 2048 bit long modulus
.+++
.......................................................................................+++
e is 65537 (0x10001)

Genera una solicitud de firma de certificado

En este paso, incorporas tu clave pública y la información de tu organización. y su sitio web en una solicitud de firma de certificado o CSR. El openssl te solicita los metadatos necesarios.

Ejecuta el siguiente comando:

openssl req -new -sha256 -key www.example.com.key -out www.example.com.csr

Este es el resultado:

You are about to be asked to enter information that will be incorporated
into your certificate request

What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CA
State or Province Name (full name) [Some-State]:California
Locality Name (for example, city) []:Mountain View
Organization Name (for example, company) [Internet Widgits Pty Ltd]:Example, Inc.
Organizational Unit Name (for example, section) []:Webmaster Help Center Example
Team
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:webmaster@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Para garantizar la validez de la CSR, ejecuta este comando:

openssl req -text -in www.example.com.csr -noout

La respuesta debería verse de la siguiente manera:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CA, ST=California, L=Mountain View, O=Google, Inc.,
OU=Webmaster Help Center Example Team,
CN=www.example.com/emailAddress=webmaster@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ad:fc:58:e0:da:f2:0b:73:51:93:29:a5:d3:9e:
                    f8:f1:14:13:64:cc:e0:bc:be:26:5d:04:e1:58:dc:
                    ...
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         5f:05:f3:71:d5:f7:b7:b6:dc:17:cc:88:03:b8:87:29:f6:87:
         2f:7f:00:49:08:0a:20:41:0b:70:03:04:7d:94:af:69:3d:f4:
         ...

Envía la CSR a una autoridad certificadora

Las diferentes autoridades certificadoras (AC) requieren que les envíes tus CSRs de diferentes maneras. Estas pueden incluir usar un formulario en su sitio web o enviar a la CSR por correo electrónico. Algunas AC, o sus revendedores, podrían incluso automatizar algunas o todas del proceso, incluida, en algunos casos, el par de claves y la generación de CSR.

Envía la CSR a tu AC y sigue las instrucciones para recibir la certificado o cadena de certificados.

Las AC cobran diferentes montos de dinero por el servicio de cupón. para tu clave pública.

También hay opciones para asignar tu clave a más de un nombre de DNS, lo que incluye varios nombres distintos (p.ej., todo example.com, www.example.com, example.net, y www.example.net) o "comodín" nombres, como *.example.com.

Copiar los certificados en todos los servidores frontend en un entorno al que no se pueda acceder a través de la Web lugar como /etc/ssl (Linux y Unix) o donde IIS (Windows) requiera de ellos.

Cómo habilitar HTTPS en tus servidores

Habilitar HTTPS en los servidores es un paso crítico para proporcionar seguridad a tus páginas web.

  • Utiliza la herramienta Configuración del servidor de Mozilla para configurar tu servidor para HTTPS y asistencia.
  • Prueba tu sitio periódicamente con la cuenta de Qualys Prueba y verifica el servidor SSL obtienes al menos una A o A+.

En este punto, debes tomar una decisión crucial sobre las operaciones. Elige uno de los lo siguiente:

  • Dedicar una dirección IP distinta a cada nombre de host al que entregue contenido tu servidor web de la imagen de la que se originó.
  • Utilizar el hosting virtual basado en nombres.

Si has estado usando diferentes direcciones IP para cada nombre de host, puedes admitir HTTP y HTTPS para todos los clientes. Sin embargo, la mayoría de los operadores de sitios usan para conservar direcciones IP y porque es más conveniente en general.

Si aún no tienes el servicio HTTPS disponible en tus servidores, habilítalo ahora (sin redireccionar HTTP a HTTPS. Consulta Cómo redireccionar de HTTP a HTTPS para obtener más información). Configura tu servidor web para usar los certificados que que se hayan comprado e instalado. Es posible que encuentres la configuración de Mozilla generador útiles.

Si tienes muchos nombres de host o subdominios, cada uno debe usar el nombre certificado.

Ahora, y de forma periódica durante el ciclo de vida de tu sitio, verifica tus URLs configuración con Qualys' Prueba del servidor SSL Tu sitio debería obtener una puntuación de A o A+. Tratar todo lo que provoca una calificación inferior como encontrar un error y mantenerse diligente, porque los nuevos ataques en contra de los algoritmos y protocolos se desarrollan constantemente.

Haga que las URL dentro del sitio sean relativas

Ahora que tu sitio se publica en HTTP y HTTPS, sea posible, independientemente del protocolo. Un factor importante es usar las URLs relativas de los vínculos dentro del sitio.

Asegúrate de que las URLs dentro del sitio y las URLs externas no dependan de un protocolo específico. Usa rutas de acceso relativas o omite el protocolo como en //example.com/something.js.

Entrega una página que contenga recursos HTTP mediante HTTPS pueden causar problemas. Cuando un navegador encuentra una página que de otro modo sería segura y utiliza recursos inseguros, le advierte a los usuarios que la página no es del todo segura y algunos navegadores se niegan a cargar o ejecutar la solicitud HTTP recursos, lo que hace que la página cambie. Sin embargo, puedes incluir de forma segura HTTPS recursos en una página HTTP. Para obtener más información sobre cómo solucionar estos problemas, consulta Cómo corregir el contenido mixto.

Si sigues vínculos basados en HTTP a otras páginas de tu sitio, también podrás cambiar el la experiencia del usuario de HTTPS a HTTP. Para corregir esto, asegúrate de que las URLs dentro del sitio sean relativas como sea posible, haciéndolos relativos de protocolo (faltan protocolo (empieza con //example.com) o relativo de host (empieza solo con la ruta de acceso, como /jquery.js).

Qué debes hacer
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
Usar URLs relativas dentro del sitio
Qué debes hacer
<h1>Welcome To Example.com</h1>
<script src="//example.com/jquery.js"></script>
<link rel="stylesheet" href="//assets.example.com/style.css"/>
<img src="//img.example.com/logo.png"/>;
<p>A <a href="//example.com/2014/12/24/">new post on cats!</a></p>
O bien, utiliza URLs de protocolo relativas dentro del sitio.
Qué debes hacer
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
<p>Check out this <a href="https://foo.com/"><b>other cool site.</b></a></p>
Usa URLs HTTPS para los vínculos a otros sitios siempre que sea posible.

Actualiza tus vínculos con una secuencia de comandos, no de forma manual, para evitar cometer errores. Si el el contenido del sitio está en una base de datos, prueba tu script en una copia de desarrollo de la en la base de datos. Si el contenido de tu sitio solo consta de archivos simples, prueba la secuencia de comandos en una copia de desarrollo de los archivos. Envía los cambios a producción solo después de que los cambios aprueben el control de calidad como de costumbre. Puedes usar la secuencia de comandos de Bram van Damme. o algo similar para detectar contenido mixto en tu sitio.

Cuando incluyas vínculos a otros sitios (en lugar de incluir recursos de ellos) no cambies el protocolo. Usted no controla el funcionamiento de esos sitios.

Para facilitar la migración de sitios grandes, recomendamos usar URL relativas de protocolo. Si no sabes si ya puedes implementar HTTPS por completo, obliga a tu sitio a usar HTTPS para todos los subrecursos pueden fallar. Es probable que haya un período momento en el que HTTPS es nuevo y extraño, y el sitio HTTP aún debe funcionar como siempre. Con el tiempo, completarás la migración y bloquearás HTTPS (consulta las siguientes dos secciones).

Si tu sitio depende de secuencias de comandos, imágenes u otros recursos publicados desde un tercero como una CDN o jquery.com, tienes dos opciones:

  • Usa URLs relativas de protocolo para estos recursos. Si el tercero no entregar HTTPS, pídeles que lo hagan. La mayoría ya lo hace, incluido jquery.com.
  • Entregar los recursos desde un servidor que controles, que ofrezca tanto solicitudes HTTP y HTTPS. De todos modos, esto suele ser una buena idea, control sobre la apariencia, el rendimiento y la seguridad de tu sitio, y no tienen confiar en un tercero para mantener la seguridad de tu sitio.

Redirecciona de HTTP a HTTPS

Para indicarles a los motores de búsqueda que usen HTTPS para acceder a tu sitio, coloca una vínculo canónico en la el encabezado de cada página con etiquetas <link rel="canonical" href="https://…"/>.

Activa la Seguridad de transporte estricta y las cookies de seguridad

En este punto, ya tienes todo listo para "limitarte" el uso de HTTPS:

  • Usa HTTP con Seguridad de Transporte Estricta (HSTS) para evitar el costo del formulario 301. o redireccionamiento.
  • Establece siempre la marca Secure en las cookies.

Primero, usa Seguridad de transporte estricta para indicarles a los clientes que siempre deben conectarse a tu servidor mediante HTTPS, incluso cuando se sigue una referencia http://. Esto derrota ataques como Eliminación de SSL, y evita el costo de ida y vuelta del 301 redirect que habilitamos en Redirecciona de HTTP a HTTPS.

Para activar HSTS, establece el encabezado Strict-Transport-Security. Página de HSTS de OWASP tiene vínculos a las instrucciones para varios tipos de software de servidor.

La mayoría de los servidores web ofrecen una capacidad similar para agregar encabezados personalizados.

También es importante asegurarse de que los clientes nunca envíen cookies (por ejemplo, para autenticación o preferencias del sitio) a través de HTTP. Por ejemplo, si la cuenta de un usuario cookies de autenticación se expusieran en texto sin formato, lo que garantizaría durante toda la sesión se destruye, incluso si ya hiciste todo lo demás bien.

Para evitar esto, cambia tu app web para que siempre establezca la marca Secure en las cookies conjuntos. En esta página de OWASP, se explica cómo configurar la marca Secure en varios frameworks de apps. Cada framework de app tiene una forma de configurar la marca.

La mayoría de los servidores web ofrecen una función de redireccionamiento sencilla. Usa 301 (Moved Permanently) para indicar a los motores de búsqueda y navegadores que la versión HTTPS es canónica y redireccionar a los usuarios a la versión HTTPS de tu sitio desde HTTP.

Clasificación en búsquedas

Google usa HTTPS como calidad de búsqueda positiva indicador. Google también publica una guía sobre cómo transferir, mover o migrar sitio y, al mismo tiempo, mantiene su clasificación de búsqueda. Bing también publica pautas para webmasters.

Rendimiento

Cuando las capas de contenido y aplicación están bien ajustadas (consulta Steve Souders libros para obtener consejos), la TLS restante los problemas de rendimiento suelen ser pequeños en relación con el costo total de la y mantener la integridad de su aplicación. Además, puedes reducir y amortizar esos costos. Consejos sobre TLS consulta Herramientas de redes de navegador de alto rendimiento de Ilya Grigorik y "Ivan Ristic", Guía de soluciones de OpenSSL y SSL y TLS a prueba de balas.

En algunos casos, TLS puede mejorar el rendimiento, principalmente como resultado de la implementación Se puede usar HTTP/2. Para obtener más información, consulta el documento de Chris Palmer's' habla sobre el rendimiento de HTTPS y HTTP/2 en Chrome Dev Summit 2014 (en inglés)

Encabezados de referencia

Cuando los usuarios siguen los vínculos de tu sitio HTTPS a otros sitios HTTP, los usuarios-agentes no envíes el encabezado de referencia. Si esto representa un problema, hay varias formas de resolverlo:

  • Se deben migrar los otros sitios a HTTPS. Si los sitios de referencia completan el sección Habilita HTTPS en los servidores de esta guía, puedes cambiar los vínculos de tu sitio por los de ellos de http:// a https:// o usa vínculos relativos de protocolo.
  • Para solucionar una variedad de problemas con los encabezados de referencia, usa el nuevo Estándar de la Política de Referencias.

Ingresos publicitarios

Los operadores que monetizan su sitio con anuncios quieren asegurarse migrar a HTTPS no reduce las impresiones de anuncios. Sin embargo, debido a la mezcla por problemas de seguridad del contenido, un <iframe> HTTP no funcionará en una página HTTPS. Hasta que los anunciantes publiquen a través de HTTPS, los operadores de sitios no pueden migrar a HTTPS. sin perder ingresos publicitarios; pero hasta que los operadores de sitios migren a HTTPS, los anunciantes no tienen mucha motivación para publicar HTTPS.

Puedes iniciar el proceso de estancación usando anunciantes que ofrecer servicios de anuncios a través de HTTPS y solicitarles a los anunciantes que no publican anuncios HTTPS en todo para hacer, al menos, una opción. Es posible que debas postergar la finalización Haga que las URL dentro del sitio sean relativas hasta que haya suficientes anunciantes interoperar de manera adecuada.