A medida que aumenta la conciencia de todos sobre la seguridad en línea y las principales empresas de Internet promueven la popularización de HTTPS, HTTPS SSL se ha convertido básicamente en el estándar para crear sitios web. Gracias a los certificados SSL gratuitos proporcionados por Let's Encrypt, Digicert, TrustAsia, Symantec, etc., el coste de utilizar HTTPS ahora es insignificante, ya sea un sitio web personal o corporativo.

Por seguridad, necesitamos usar HTTPS, pero activar SSL aumentará la sobrecarga de memoria, CPU y ancho de banda de la red. En comparación con http, al utilizar el protocolo de enlace de tres vías TCP para establecer una conexión, el cliente y el servidor necesitan intercambiar 3 paquetes. Además de los tres paquetes de TCP, https también necesita 9 paquetes necesarios para el protocolo de enlace SSL, para un total de 12. paquetes. Por lo tanto, si HTTPS se optimiza mucho, es probable que el rendimiento sea lento.

Por supuesto, algunas personas pueden pensar que la mayor sobrecarga del servidor de HTTPS y SSL básicamente no se siente. Esto se debe a que el tráfico del sitio web es relativamente pequeño y la configuración de rendimiento del servidor es suficiente para soportar el tráfico actual. Pero para sitios web grandes, como Baidu, Google y aplicaciones populares, sigue siendo muy útil optimizar el rendimiento de HTTPS y reducir el consumo de recursos.

Ocho consejos sobre cómo optimizar HTTPS y SSL: reducir el tiempo de espera, reducir la pérdida de rendimiento de HTTPS y aumentar el almacenamiento en caché de SSL

Este artículo compartirá alguna experiencia en la optimización del uso de HTTPS y SSL. Hay más tutoriales de experiencia sobre certificados SSL y HTTPS:

  1. Colección y resumen de certificados SSL gratuitos: agregue acceso cifrado seguro HTTPS al sitio web de forma gratuita
  2. Diez consejos de aceleración de CDN gratuitos de CloudFlare que quizás no conozcas: SSLDDOSCache
  3. Habilite HSTS y únase a la lista de precarga de HSTS para hacer que el acceso HTTPS al sitio web sea más seguro, con un método para eliminar HSTS

PD: Actualizado el 6 de septiembre de 2018, si desea utilizar un servicio de resolución de DNS pago, aquí tiene dos servicios DNS más económicos y más adecuados para particulares: Dos productos DNS adecuados para uso personal: ClouDNS y DNS Resolución de nombres de dominio sencilla.

PD: actualizado el 15 de enero de 2019, Si desea que el acceso SSL obtenga una velocidad más rápida y un mayor rendimiento, puede probar TLSV1.3 y la compresión Brotli: aceleración de optimización del sitio web: active TLSV1.3 y la compresión Brotli -Oneinstack, LNMP, panel Pagoda.

1. ¿Cómo elegir un certificado SSL gratuito?

Se recomienda elegir Let's Encrypt. Aunque el certificado SSL gratuito de Let's Encrypt tiene solo 90 días, se puede renovar indefinidamente y admite la renovación manual y automática. Let's Encrypt SSL es reconocido por los principales navegadores y es la primera opción para certificados SSL gratuitos. Tutorial: Let's Encrypt Wildcard nombre de dominio gratuito Certificado SSL aplicación con un solo clic y tutorial de uso de SSL.

Let's Encrypt es adecuado para hosts con IP independientes como VPS. De lo contrario, solo puede utilizar algunas aplicaciones de certificados SSL en línea desarrolladas con la API de Let's Encrypt. Por supuesto, si tiene cierta solidez financiera, es más factible elegir un certificado SSL de pago. Para obtener más certificados SSL, consulte: Colección y resumen de certificados SSL gratuitos.

2. Habilite HSTS en el servidor

Los sitios web que utilizan el protocolo HSTS garantizarán que el navegador siempre se conecte a la versión HTTPS del sitio web, sin requerir que los usuarios ingresen manualmente una dirección cifrada que contenga https:// en la barra de direcciones URL. Utilizo el servidor Nginx. Solo necesito editar el archivo de configuración de Nginx (como: /usr/local/nginx/conf/nginx.conf) y agregar las siguientes líneas al bloque del servidor de la configuración HTTPS:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

Para conocer métodos detallados para habilitar HSTS para Apache, Lighttpd, etc., consulte: Habilitar HSTS en el servidor.

3. Agregue el nombre de dominio al plan de lista de precarga de HSTS.

Aunque el protocolo HSTS está habilitado anteriormente para garantizar que los usuarios siempre accedan a conexiones Https, generalmente los usuarios que visitan el sitio web por primera vez habitualmente ingresarán nombres de dominio que no sean https, lo que genera el problema del secuestro de http cuando visitan el sitio web por primera vez. tiempo. El plan de lista de precarga de HSTS es para resolver este problema. Es una lista integrada en navegadores como ChromeFirefoxEdge.

Cómo unirse a la lista de precarga de HSTS: habilite HSTS y únase a la lista de precarga de HSTS para que el acceso HTTPS al sitio web sea más seguro. Adjunto se encuentra el método para eliminar HSTS. Actualmente, wzfou.com se ha agregado con éxito a la lista de precarga de HSTS. Si está utilizando Chrome o Firefox, la primera vez que visite este sitio, utilizará HTTPS para conectarse de forma predeterminada.

Habilitar grapado OCSP en Nginx. (ssl_trusted_certificate se puede omitir si la directiva ssl_certificate especifica la cadena de certificados completa)

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/certs/chained.pem;

Habilitar grapado OCSP en Apache:

En <VirtualHost></VirtualHost> agregue:

SSLUseStapling on

Fuera de <VirtualHost></VirtualHost> agregue:

SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

5. Utilice certificados duales ECC y RSA

De forma predeterminada, todos usaremos certificados RSA porque los certificados RSA tienen la compatibilidad más amplia. Sin embargo, el certificado ECC tiene las características de tamaño pequeño, velocidad de computación rápida y alta seguridad (la clave ECC de 256 bits puede proporcionar una seguridad equivalente a la clave RSA de 3072 bits). Puede proporcionar rendimiento HTTPS hasta cierto punto.

Let's Encrypt ya admite la generación de certificados ECC. Utilice acme.sh para emitir certificados SSL. Especifique --keylength ec-256 para cambiar el tipo de certificado a ECC.

acme.sh --issue -w /data/wwwroot/wzfou.com -d wzfou.com -d www.wzfou.com --keylength ec-256

Cabe señalar que ECC no es compatible con Windows XP. En este momento, pensaremos en utilizar certificados duales, es decir, cuando el certificado ECC no sea compatible, Nginx mostrará automáticamente el certificado RSA al usuario. Si la versión de nginx es mayor que 1.11, puede escribir directamente las rutas de los certificados duales ECC y RSA en el archivo de configuración que wzfou.com muestra a continuación:

#ECC
ssl_certificate /root/.acme.sh/wzfou.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/wzfou.com_ecc/wzfou.com.key;
#RSA
ssl_certificate /usr/local/nginx/conf/ssl/wzfou.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/wzfou.com.key;

Reinicie Nginx Cuando usuarios como XP que no admiten certificados ECC acceden al sitio web, se muestra el certificado RSA.

Otros usuarios prefieren utilizar certificados ECC.

Si descubre que ECC no se muestra de manera preferencial, verifique si ssl_prefer_server_ciphers está habilitado y si ssl_ciphers está configurado correctamente. La siguiente es la configuración utilizada por wzfou.com:

ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;

Además, puede elegir cualquiera de los tres siguientes (solo para pruebas):

ssl_ciphers 'EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5';

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-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:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';

6. Habilite DNS CAA

La función de DNS CAA es permitir que solo la CA que figura en el registro emita certificados para el nombre de dominio (o nombre de subdominio) para evitar que alguien falsifique certificados SSL. Al mismo tiempo, el registro CAA puede controlar la emisión de un único dominio. nombrar los certificados SSL y también puede controlar el certificado comodín. Para conocer métodos detallados, consulte: Configuración de DNS de JD Cloud CAA.

Problema:Habilitar DNS CAA genera un error: Verificar error: Registro CAA para *.wzfou.comprevents emisión. La solución es agregar el registro issuewild: 0 issueswild "letsencrypt.org". Además, se proporcionan dos sitios web para comprobar si la configuración de CAA es correcta:

  1. HTTPS://CAA test.co.UK/
  2. HTTPS://amigos de Nochevieja.IO/labs/CAA-validator

7. Actualice automáticamente los certificados SSL con regularidad

Si desea actualizar manualmente:

# RSA
$ acme.sh --renew -d wzfou.com –d www.wzfou.com --force

# ECC
acme.sh --renew -d wzfou.com –d www.wzfou.com --force --ecc

Generalmente, acme.sh ha agregado automáticamente tareas programadas para actualizar periódicamente el certificado Let's Encrypt. Si descubre que el certificado no se actualiza periódicamente, verifique si su tarea Cron es correcta. También puede intentar forzar una actualización.

"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --force

8. Verifique la configuración del certificado SSL

Los sitios web de prueba más utilizados incluyen:

  1. HTTPS://wuwuwu.SSL labs.com/SSL test/analyze.HTML
  2. https://nokill.com/

Se recomienda encarecidamente utilizar ssllabs.com. Los resultados de la prueba siguen siendo muy precisos, de la siguiente manera:

9. Integral

Según las estrategias de optimización anteriores, la optimización específica del archivo de configuración de Nginx es la siguiente:

server {

listen 443 ssl http2;
#使用HTTP/2,需要Nginx1.9.7以上版本

add_header Strict-Transport-Security "max-age=6307200; includeSubdomains; preload";
#开启HSTS,并设置有效期为“6307200秒”(6个月),包括子域名(根据情况可删掉),预加载到浏览器缓存(根据情况可删掉)

add_header X-Frame-Options DENY;
#禁止被嵌入框架

add_header X-Content-Type-Options nosniff;
#防止在IE9、Chrome和Safari中的MIME类型混淆攻击

ssl_certificate /usr/local/nginx/conf/vhost/sslkey/www.linpx.com.crt;
ssl_certificate_key /usr/local/nginx/conf/vhost/sslkey/www.linpx.com.key;
#SSL证书文件位置

ssl_trusted_certificate /usr/local/nginx/conf/vhost/sslkey/chaine.pem;
#OCSP Stapling的证书位置

ssl_dhparam /usr/local/nginx/conf/vhost/sslkey/dhparam.pem;
#DH-Key交换密钥文件位置

#SSL优化配置

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#只允许TLS协议

ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
#加密套件,这里用了CloudFlare's Internet facing SSL cipher configuration

ssl_prefer_server_ciphers on;
#由服务器协商最佳的加密算法

ssl_session_cache builtin:1000 shared:SSL:10m;
#Session Cache,将Session缓存到服务器,这可能会占用更多的服务器资源

ssl_session_tickets on;
#开启浏览器的Session Ticket缓存

ssl_session_timeout 10m; 
#SSL session过期时间

ssl_stapling on; 
#OCSP Stapling开启,OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高TLS握手速度

ssl_stapling_verify on;
#OCSP Stapling验证开启

resolver 8.8.8.8 8.8.4.4 valid=300s;
#用于查询OCSP服务器的DNS

resolver_timeout 5s;
#查询域名超时时间

···

}

Durante el uso real, se descubre que las "optimizaciones" individuales deben determinarse de acuerdo con las propias necesidades. La siguiente es la configuración de Nginx utilizada actualmente por wzfou.com, solo como referencia:

listen 80; 
listen 443 ssl http2;
#ECC
ssl_certificate /root/.acme.sh/wzfou.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/wzfou.com_ecc/wzfou.com.key;  
#RSA 
ssl_certificate /usr/local/nginx/conf/ssl/wzfou.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/wzfou.com.key; 
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
ssl_stapling on; 
ssl_stapling_verify on;

PD: Actualizado el 5 de agosto de 2018. Gracias a xiaoz por el recordatorio. Aquí hay un sitio web para generar configuración SSL en línea, de Mozilla, que es muy referenciable:

  1. https://Mozilla.GitHub.IO/server-dead-torres/ratings-config-generator/

Deja una respuesta