À medida que a consciência de todos sobre a segurança online aumenta e as principais empresas de Internet promovem a popularização do HTTPS, o HTTPS SSL tornou-se basicamente o padrão para a construção de sites. Graças aos certificados SSL gratuitos fornecidos por Let’s Encrypt, Digicert, TrustAsia, Symantec, etc., o custo de usar HTTPS agora é insignificante, seja um site pessoal ou corporativo.

Por segurança, precisamos usar HTTPS, mas ativar o SSL aumentará a sobrecarga de memória, CPU e largura de banda da rede. Comparado com http, usando o handshake de três vias TCP para estabelecer uma conexão, o cliente e o servidor precisam trocar 3 pacotes. Além dos três pacotes de TCP, o https também precisa de 9 pacotes necessários para o handshake SSL, totalizando 12. pacotes. Portanto, se o HTTPS for muito otimizado, ele estará propenso a diminuir o desempenho.

Claro, algumas pessoas podem pensar que o aumento da sobrecarga do servidor HTTPS e SSL basicamente não é sentido. Isso ocorre porque o tráfego do site é relativamente pequeno e a configuração de desempenho do servidor é suficiente para suportar o tráfego atual. Mas para grandes sites, como Baidu, Google e aplicativos populares, ainda é muito útil otimizar o desempenho do HTTPS e reduzir o consumo de recursos.

Oito dicas sobre como otimizar HTTPS e SSL – reduza o tempo de espera, reduza a perda de desempenho HTTPS e aumente o cache SSL

Este artigo compartilhará alguma experiência na otimização do uso de HTTPS e SSL. Existem mais tutoriais de experiência sobre certificados SSL e HTTPS:

  1. Coleta e resumo gratuitos de certificados SSL - adicione acesso criptografado seguro HTTPS ao site gratuitamente
  2. Dez dicas de aceleração de CDN grátis do CloudFlare que você talvez não conheça-SSLDDOSCache
  3. Habilite o HSTS e junte-se à lista de pré-carregamento do HSTS para tornar o acesso HTTPS ao site mais seguro - com métodos para excluir o HSTS

PS: Atualizado em 6 de setembro de 2018, se você quiser usar um serviço pago de resolução de DNS, aqui estão dois serviços DNS mais baratos e mais adequados para indivíduos: Dois produtos DNS adequados para uso pessoal: ClouDNS e DNS Resolução facilitada de nomes de domínio.

PS: Atualizado em 15 de janeiro de 2019, Se você deseja que o acesso SSL obtenha velocidade mais rápida e melhor desempenho, você pode tentar a compactação TLSV1.3 e Brotli: Aceleração de otimização de site - ative a compactação TLSV1.3 e Brotli -Oneinstack, LNMP, painel Pagoda.

1. Como escolher um certificado SSL grátis?

Recomenda-se escolher Let’s Encrypt. Embora o certificado SSL gratuito Let’s Encrypt tenha duração de apenas 90 dias, ele pode ser renovado indefinidamente e suporta renovação manual e automática. Let’s Encrypt SSL é reconhecido por todos os principais navegadores e é a primeira escolha para certificados SSL gratuitos. Tutorial: Vamos criptografar o aplicativo de um clique do certificado SSL de nome de domínio gratuito Wildcard e tutorial de uso de SSL.

Let’s Encrypt é adequado para hosts com IPs independentes, como VPS. Caso contrário, você só poderá usar alguns aplicativos de certificado SSL online desenvolvidos usando a API Let’s Encrypt. Claro, se você tiver uma certa solidez financeira, é mais viável escolher um certificado SSL pago. Para mais certificados SSL, consulte: Coleção e resumo de certificados SSL gratuitos.

2. Habilite HSTS no servidor

Os sites que usam o protocolo HSTS garantirão que o navegador sempre se conecte à versão HTTPS do site, sem exigir que os usuários insiram manualmente um endereço criptografado contendo https:// na barra de endereço URL. Eu uso o servidor Nginx, só preciso editar o arquivo de configuração do Nginx (como: /usr/local/nginx/conf/nginx.conf) e adicionar as seguintes linhas ao bloco do servidor da configuração HTTPS:

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

Para obter detalhes sobre como habilitar HSTS para Apache, Lighttpd, etc., consulte: Habilitar HSTS no servidor.

3. Adicione o nome de domínio ao plano da lista de pré-carregamento HSTS

Embora o protocolo HSTS esteja habilitado acima para garantir que os usuários sempre acessem conexões HTTPS, geralmente os usuários que visitam o site pela primeira vez inserirão habitualmente nomes de domínio não https, o que leva ao problema de sequestro de http ao visitar o site pela primeira vez. tempo. O plano da lista de pré-carregamento HSTS é para resolver este problema. É uma lista integrada em navegadores como o chromeFirefoxEdge.

Como ingressar na lista de pré-carregamento HSTS: Habilite o HSTS e ingresse na lista de pré-carregamento HSTS para tornar o acesso HTTPS ao site mais seguro - Em anexo está o método de exclusão do HSTS. No momento, wzfou.com foi adicionado com sucesso à lista de pré-carregamento do HSTS. Se você estiver usando o Chrome ou Firefox, na primeira vez que visitar este site, você usará HTTPS para se conectar por padrão.

Ativar grampeamento OCSP no Nginx. (ssl_trusted_certificate pode ser omitido se a diretiva ssl_certificate especificar a cadeia completa de certificados)

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

Ativar grampeamento OCSP no Apache:

Em <VirtualHost></VirtualHost> adicione:

SSLUseStapling on

Fora de <VirtualHost></VirtualHost> adicione:

SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

5. Use certificados duplos ECC e RSA

Por padrão, todos usaremos certificados RSA porque os certificados RSA têm a mais ampla compatibilidade. No entanto, o certificado ECC tem as características de tamanho pequeno, velocidade de computação rápida e alta segurança (a chave ECC de 256 bits pode fornecer a mesma segurança que a chave RSA de 3072 bits) Ele pode fornecer desempenho HTTPS até certo ponto.

Let’s Encrypt já suporta a geração de certificados ECC. Use acme.sh para emitir certificados SSL. Especifique --keylength ec-256 para alterar o tipo de certificado para ECC:

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

Deve-se observar que o ECC não é compatível com Windows XP. Neste momento, pensaremos em usar certificados duplos. Ou seja, quando o certificado ECC não for compatível, o Nginx exibirá automaticamente o certificado RSA para o usuário. Se a versão do nginx for superior a 1.11, você pode escrever diretamente os caminhos dos certificados duplos ECC e RSA no arquivo de configuração wzfou.com demonstra o seguinte:

#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 o Nginx Quando usuários como XP que não suportam certificados ECC acessam o site, o certificado RSA é exibido.

Outros usuários preferem usar certificados ECC.

Se você achar que o ECC não é exibido preferencialmente, verifique se ssl_prefer_server_ciphers está habilitado e se ssl_ciphers está configurado corretamente.

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;

Além disso, você pode escolher qualquer um dos três seguintes (apenas para teste):

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

A função do DNS CAA é permitir apenas que a CA listada no registro emita certificados para o nome de domínio (ou nome de subdomínio) para evitar que alguém falsifique certificados SSL. Ao mesmo tempo, o registro CAA pode controlar a emissão de um único domínio. nomeia certificados SSL e também pode controlar o certificado Wildcard. Para métodos detalhados, consulte: Configurações de DNS do JD Cloud CAA.

Problema:A ativação do DNS CAA resulta em um erro: Verifique o erro: registro CAA para emissão *.wzfou.comprevents. A solução é adicionar o registro issuewild: 0 issuewild "letsencrypt.org" . Além disso, são fornecidos dois sites para verificar se a configuração do CAA está correta:

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

7. Atualize automaticamente os certificados SSL regularmente

Se você deseja atualizar 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

Geralmente, acme.sh adicionou automaticamente tarefas agendadas para atualizar regularmente o certificado Let’s Encrypt. Se você descobrir que o certificado não é atualizado regularmente, verifique se sua tarefa Cron está correta.

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

8. Verifique a configuração do certificado SSL

Os sites de teste comumente usados ​​incluem:

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

É altamente recomendável usar ssllabs.com. Os resultados do teste ainda são muito precisos, como segue:

9. Abrangente

Com base nas estratégias de otimização acima, a otimização específica do arquivo de configuração Nginx é a seguinte:

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 o uso real, verifica-se que as "otimizações" individuais devem ser determinadas de acordo com as próprias necessidades. A seguir está a configuração Nginx atualmente usada por wzfou.com, apenas para referência:

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;

PS: Atualizado em 5 de agosto de 2018 Obrigado ao xiaoz pelo lembrete. Aqui está um site para gerar configuração SSL online, da Mozilla, que é muito referenciável:

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

Deixe uma resposta