SSL#

Fornece o suporte necessário para HTTPS.

Ao compilar a partir do código-fonte, o módulo não é compilado por padrão; ele deve ser habilitado com a opção de compilação --with-http_ssl_module.

Em pacotes e imagens de nossos repositórios, o módulo está incluído na compilação.

Nota

Este módulo requer a biblioteca OpenSSL.

Exemplo de configuração#

Para reduzir a carga do processador, recomenda-se:

Por exemplo:

worker_processes auto;

http {

    # ...

    server {
        listen              443 ssl;
        keepalive_timeout   70;

        ssl_protocols       TLSv1.2 TLSv1.3;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate     /usr/local/angie/conf/cert.pem;
        ssl_certificate_key /usr/local/angie/conf/cert.key;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;

        # ...
    }

Diretivas#

ssl_buffer_size#

Sintaxe

ssl_buffer_size tamanho;

Padrão

ssl_buffer_size 16k;

Contexto

http, server

Define o tamanho do buffer usado para enviar dados.

Por padrão, o tamanho do buffer é 16k, que corresponde ao overhead mínimo ao enviar respostas grandes. Para minimizar o Time To First Byte pode ser benéfico usar valores menores, por exemplo:

ssl_buffer_size 4k;

ssl_certificate#

Sintaxe

ssl_certificate file | data:certificate;

Padrão

—

Contexto

http, server

Especifica o certificado no formato PEM para o servidor virtual dado. Certificados intermediários, se houver, vêm depois do certificado primário no mesmo arquivo ou valor; uma chave secreta no formato PEM também pode ser colocada ali.

O valor é o caminho do arquivo de certificado; um caminho relativo é resolvido em relação ao diretório do arquivo de configuração principal. Um valor que começa com data: contém o próprio texto PEM do certificado, de modo que nenhum arquivo é necessário. Coloque esse valor entre aspas, pois o texto PEM contém espaços. Para mantê-lo em uma única linha de uma configuração indentada, escreva cada quebra de linha como \n:

ssl_certificate 'data:-----BEGIN CERTIFICATE-----\nMIIBszCCAVmgAwIBAgIU...\n-----END CERTIFICATE-----\n';

Uma quebra de linha literal também funciona, mas cada linha seguinte do texto PEM deve então começar na primeira coluna; linhas indentadas fazem o certificado falhar ao carregar:

ssl_certificate     'data:-----BEGIN CERTIFICATE-----
MIIBszCCAVmgAwIBAgIU...
-----END CERTIFICATE-----';
ssl_certificate_key /etc/angie/ssl/example.com.key;

Esta diretiva pode ser especificada múltiplas vezes para carregar certificados de diferentes tipos, por exemplo, RSA e ECDSA:

server {
    listen              443 ssl;
    server_name         example.com;

    ssl_certificate     example.com.rsa.crt;
    ssl_certificate_key example.com.rsa.key;

    ssl_certificate     example.com.ecdsa.crt;
    ssl_certificate_key example.com.ecdsa.key;

    # ...
}

O valor pode conter variáveis, no todo ou em parte. Se qualquer valor de ssl_certificate ou ssl_certificate_key de um servidor virtual contiver variáveis, o Angie carrega todos os certificados e chaves desse servidor durante cada handshake SSL, em vez de ao ler a configuração. O valor avaliado é interpretado como descrito acima: texto PEM se começar com data:, caso contrário um caminho de arquivo:

ssl_certificate     $ssl_server_name.crt;
ssl_certificate_key $ssl_server_name.key;

O handshake precede a requisição, portanto apenas variáveis já conhecidas nesse ponto têm valores: por exemplo, $ssl_server_name, $remote_addr, $server_addr e as variáveis que map deriva delas. Uma variável atribuída por set ainda está vazia durante o handshake, e um valor vazio faz o handshake falhar. A variável $acme_cert_<name> do módulo ACME é um exemplo de variável cujo valor é um valor data: pronto.

Carregar certificados a cada handshake consome tempo de CPU; a diretiva ssl_certificate_cache mantém os certificados e chaves carregados para reutilização. Certificados carregados durante o handshake não recebem stapling nem compressão: ssl_stapling e ssl_certificate_compression não têm efeito sobre eles.

Nota

Deve-se ter em mente que devido às limitações do protocolo HTTPS para máxima interoperabilidade, servidores virtuais devem escutar em endereços IP diferentes.

Se ssl_ntls estiver habilitado, a diretiva pode aceitar dois argumentos (as partes de assinatura e criptografia do certificado) em vez de um:

listen ... ssl;

ssl_ntls  on;

# certificado NTLS duplo
ssl_certificate      sign.crt enc.crt;
ssl_certificate_key  sign.key enc.key;

# pode ser usado junto com um certificado RSA regular
ssl_certificate  rsa.crt;
ssl_certificate_key rsa.key;

ssl_certificate_cache#

Sintaxe

ssl_certificate_cache off;

ssl_certificate_cache max=N [inactive=time] [valid=time];

Padrão

ssl_certificate_cache off;

Contexto

http, server

Define um cache que armazena certificados SSL e chaves secretas especificados usando variáveis.

A diretiva suporta os seguintes parâmetros:

  • max — define o número máximo de elementos no cache. Quando o cache transborda, os elementos menos recentemente usados (LRU) são removidos.

  • inactive — define o tempo após o qual um elemento é removido se não foi acessado durante esse tempo, mesmo que ainda esteja dentro de seu período valid; cada acesso reinicia este temporizador. O padrão é 10 segundos.

  • valid — define o tempo durante o qual um elemento em cache é reutilizado sem verificações. O padrão é 60 segundos. Após este período, um elemento carregado de um arquivo é recarregado apenas se o arquivo tiver mudado, e uma chave carregada com o prefixo engine: ou store: é carregada novamente; um elemento especificado com o prefixo data: permanece válido.

  • off — desabilita o cache.

Chaves protegidas por senha (veja ssl_password_file) não são armazenadas em cache.

Exemplo:

ssl_certificate       $ssl_server_name.crt;
ssl_certificate_key   $ssl_server_name.key;
ssl_certificate_cache max=1000 inactive=20s valid=1m;

ssl_certificate_compression#

Sintaxe

ssl_certificate_compression on | off;

Padrão

ssl_certificate_compression off;

Contexto

http, server

Habilita compressão TLS 1.3 de certificados de servidor.

Nota

A diretiva é suportada ao usar OpenSSL 3.2 ou superior; a lista de algoritmos de compressão suportados é fornecida pela biblioteca.

Nota

A diretiva é suportada ao usar BoringSSL; a lista de algoritmos de compressão suportados inclui zlib.

A diretiva é incompatível com ssl_stapling: uma configuração que habilita ambos no mesmo servidor falha ao carregar.

ssl_certificate_key#

Sintaxe

ssl_certificate_key file | data:key | engine:name:id | store:uri;

Padrão

—

Contexto

http, server

Especifica a chave secreta no formato PEM para o servidor virtual dado.

Um caminho de arquivo e um valor data: são interpretados como em ssl_certificate. Mais dois prefixos estão disponíveis apenas para chaves:

  • engine:name:id — a chave com o identificador id do engine OpenSSL name;

  • store:uri — a chave que a API OpenSSL STORE encontra em uri, por exemplo, uma chave em um token endereçado por um URI PKCS #11, como 'store:pkcs11:token=hsm;object=server'; coloque esse valor entre aspas por causa do caractere ;.

O valor pode conter variáveis; o Angie então carrega a chave durante cada handshake SSL, junto com o certificado, conforme descrito em ssl_certificate. Uma chave protegida por senha é descriptografada com as senhas de ssl_password_file, seja carregada com a configuração ou durante o handshake.

O valor pode chegar por inteiro ao log de erros: a mensagem sobre uma chave que falha ao carregar o cita e, com variáveis, o log de nível debug registra cada valor avaliado de certificado e chave a cada handshake. Com o prefixo data:, o log recebe, portanto, a própria chave secreta.

Se ssl_ntls estiver habilitado, a diretiva pode aceitar dois argumentos (as partes de assinatura e criptografia da chave) em vez de um:

listen ... ssl;

ssl_ntls  on;

# certificado NTLS duplo
ssl_certificate      sign.crt enc.crt;
ssl_certificate_key  sign.key enc.key;

# pode ser usado junto com um certificado RSA regular
ssl_certificate  rsa.crt;
ssl_certificate_key rsa.key;

ssl_ciphers#

Sintaxe

ssl_ciphers ciphers;

Padrão

ssl_ciphers HIGH:!aNULL:!MD5;

Contexto

http, server

Especifica as cifras habilitadas. As cifras são especificadas no formato compreendido pela biblioteca OpenSSL, por exemplo:

ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

A lista de cifras depende da versão do OpenSSL instalada. A lista completa pode ser visualizada usando o comando openssl ciphers.

Aviso

Com o OpenSSL, a diretiva ssl_ciphers não configura cifras TLS 1.3; defina-as com o comando Ciphersuites da diretiva ssl_conf_command. A diretiva ssl_ciphers ignora nomes de cifras TLS 1.3 em seu valor, portanto esses nomes não restringem as conexões TLS 1.3. Se o valor consistir apenas em tais nomes, por exemplo TLS_AES_128_GCM_SHA256, a configuração não é carregada, com o erro no cipher match.

  • No LibreSSL, cifras TLS 1.3 podem ser configuradas usando ssl_ciphers.

  • No BoringSSL, cifras TLS 1.3 não podem ser configuradas de forma alguma.

ssl_client_certificate#

Sintaxe

ssl_client_certificate file;

Padrão

—

Contexto

http, server

Especifica um arquivo com certificados CA confiáveis no formato PEM usado para verificar certificados de cliente e respostas OCSP se ssl_stapling estiver habilitado.

A lista de certificados será enviada aos clientes. Se isso não for desejado, a diretiva ssl_trusted_certificate pode ser usada.

ssl_conf_command#

Sintaxe

ssl_conf_command name value;

Padrão

—

Contexto

http, server

Define comandos de configuração OpenSSL arbitrários.

Nota

A diretiva é suportada ao usar OpenSSL 1.0.2 ou superior. O comando Ciphersuites, que define as cifras TLS 1.3, requer OpenSSL 1.1.1 ou superior.

Várias diretivas ssl_conf_command podem ser especificadas no mesmo nível:

ssl_conf_command Options PrioritizeChaCha;
ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256;

Essas diretivas são herdadas do nível de configuração anterior se e somente se não houver diretivas ssl_conf_command definidas no nível atual.

Aviso

Note que configurar o OpenSSL diretamente pode resultar em comportamento inesperado.

ssl_crl#

Sintaxe

ssl_crl file;

Padrão

—

Contexto

http, server

Especifica um arquivo com certificados revogados (CRL) no formato PEM usado para verificar certificados de cliente.

ssl_dhparam#

Sintaxe

ssl_dhparam file;

Padrão

—

Contexto

http, server

Especifica um arquivo com parâmetros DH para cifras DHE.

Aviso

Por padrão, nenhum parâmetro é definido e, portanto, cifras DHE não serão usadas.

ssl_early_data#

Sintaxe

ssl_early_data on | off;

Padrão

ssl_early_data off;

Contexto

http, server

Habilita ou desabilita dados iniciais TLS 1.3.

Requisições enviadas dentro de dados iniciais estão sujeitas a ataques de replay. Para proteger contra tais ataques na camada de aplicação, a variável $ssl_early_data deve ser usada.

proxy_set_header Early-Data $ssl_early_data;

Nota

A diretiva é suportada ao usar OpenSSL 1.1.1 ou superior ou BoringSSL.

ssl_ecdh_curve#

Sintaxe

ssl_ecdh_curve curve;

Padrão

ssl_ecdh_curve auto;

Contexto

http, server

Especifica uma curva para cifras ECDHE.

Nota

Ao usar OpenSSL 1.0.2 ou superior, é possível especificar múltiplas curvas, por exemplo:

ssl_ecdh_curve prime256v1:secp384r1;

O valor especial auto corresponde à lista de curvas incorporadas na biblioteca OpenSSL para OpenSSL 1.0.2 ou superior, ou prime256v1 para versões mais antigas.

Nota

Ao usar OpenSSL 1.0.2 ou superior, esta diretiva define a lista de curvas suportadas pelo servidor. Assim, para que certificados ECDSA funcionem, é importante incluir as curvas usadas nos certificados.

ssl_encrypted_hello_key#

Adicionado na versão 1.11.0.

Sintaxe

ssl_encrypted_hello_key file;

Padrão

—

Contexto

http, server

Especifica um arquivo com uma chave secreta e uma configuração para a extensão TLS Encrypted Client Hello (ECH), que oculta o nome do servidor solicitado pelo cliente dos observadores na rede. A variável $ssl_encrypted_hello indica se a extensão foi utilizada em um handshake.

A diretiva pode ser especificada várias vezes, o que permite rotacionar as chaves: todas as chaves são usadas para a descriptografia, mas apenas a configuração da primeira chave é oferecida aos clientes para novas tentativas.

ssl_encrypted_hello_key current.ech;
ssl_encrypted_hello_key previous.ech;

O arquivo contém uma chave secreta seguida de uma ECHConfigList, ambas no formato PEM. Com a ramificação do recurso ECH do OpenSSL, esse arquivo é criado com:

$ openssl ech -public_name public.example.com -out example.ech

Com o BoringSSL, bssl generate-ech grava a chave e a ECHConfigList em arquivos binários separados, e nenhum dos dois é utilizável como está. Os dois precisam ser reunidos em um único arquivo PEM: a chave bruta precisa ser encapsulada em uma estrutura PKCS#8 e codificada em base64 dentro de um bloco PRIVATE KEY, seguida da ECHConfigList, e não de um ECHConfig isolado, codificada em base64 dentro de um bloco ECHCONFIG. Compilações com o BoringSSL aceitam apenas chaves X25519. O formato em si não depende da biblioteca TLS, portanto um arquivo gerado com o comando acima também é aceito por uma compilação com o BoringSSL.

O Angie descriptografa o ClientHello antes de saber o nome do servidor solicitado por meio do SNI, portanto as chaves precisam ser especificadas para o servidor padrão.

Nota

O suporte a ECH vem da biblioteca TLS, portanto o Angie precisa ser vinculado a uma que o forneça: a ramificação do recurso ECH do OpenSSL, que é configurada assim:

$ ./configure --with-openssl=../openssl-ech

ou o BoringSSL, que é configurado de outra forma. Caso contrário, a diretiva é ignorada com um aviso no log de erros.

ssl_keylog_file#

Adicionado na versão 1.12.0.

Sintaxe

ssl_keylog_file file;

Padrão

—

Contexto

http, server

Especifica um arquivo para registrar as chaves SSL/TLS das conexões tratadas pelo contexto, usando o formato SSLKEYLOGFILE usado por ferramentas como o Wireshark para descriptografar o tráfego TLS capturado.

A diretiva não deve ser usada com o LibreSSL.

Aviso

O arquivo contém material de chave TLS sensível que pode descriptografar o tráfego capturado das conexões correspondentes. Use esta diretiva apenas para depuração ou análise de protocolo, restrinja o acesso ao arquivo e remova-o quando não for mais necessário.

ssl_ntls#

Sintaxe

ssl_ntls on | off;

Padrão

ssl_ntls off;

Contexto

http, server

Habilita suporte do lado do servidor para NTLS ao usar a biblioteca TLS Tongsuo.

listen ... ssl;
ssl_ntls  on;

Nota

O Angie deve ser compilado com o parâmetro de configuração --with-ntls e uma biblioteca SSL com suporte a NTLS:

$ ./configure --with-openssl=../Tongsuo-8.3.0 \
              --with-openssl-opt=enable-ntls  \
              --with-ntls

ssl_ocsp#

Sintaxe

ssl_ocsp on | off | leaf;

Padrão

ssl_ocsp off;

Contexto

http, server

Habilita validação OCSP da cadeia de certificados do cliente. O parâmetro leaf habilita validação apenas do certificado do cliente.

Para que a validação OCSP funcione, a diretiva ssl_verify_client deve ser definida como on ou optional.

Para resolver o nome do host do respondedor OCSP, a diretiva resolver também deve ser especificada.

Exemplo:

ssl_verify_client on;
ssl_ocsp          on;
resolver          127.0.0.53;

ssl_ocsp_cache#

Sintaxe

ssl_ocsp_cache off | [shared:name:size];

Padrão

ssl_ocsp_cache off;

Contexto

http, server

Define o nome e tamanho do cache que armazena o status do certificado do cliente para validação OCSP. O cache é compartilhado entre todos os processos worker. Um cache com o mesmo nome pode ser usado em vários servidores virtuais.

O parâmetro off proíbe o uso do cache.

ssl_ocsp_responder#

Sintaxe

ssl_ocsp_responder uri;

Padrão

—

Contexto

http, server

Substitui a URI do respondedor OCSP especificada na extensão de certificado "Authority Information Access" para validação de certificados de cliente.

Apenas respondedores OCSP http:// são suportados:

ssl_ocsp_responder http://ocsp.example.com/;

ssl_password_file#

Sintaxe

ssl_password_file file;

Padrão

—

Contexto

http, server

Especifica um arquivo com senhas para chaves secretas onde cada senha é especificada em uma linha separada. As senhas são tentadas em sequência ao carregar a chave.

Exemplo:

http {
    ssl_password_file /etc/keys/global.pass;
    ...

    server {
        server_name www1.example.com;
        ssl_certificate_key /etc/keys/first.key;
    }

    server {
        server_name www2.example.com;

        # pipe nomeado também pode ser usado em vez de um arquivo
        ssl_password_file /etc/keys/fifo;
        ssl_certificate_key /etc/keys/second.key;
    }
}

ssl_prefer_server_ciphers#

Sintaxe

ssl_prefer_server_ciphers on | off;

Padrão

ssl_prefer_server_ciphers off;

Contexto

http, server

Especifica que as cifras do servidor devem ser preferidas sobre as cifras do cliente ao usar os protocolos SSLv3 e TLS.

ssl_protocols#

Sintaxe

ssl_protocols SSLv2 | SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2 | TLSv1.3 ...;

Padrão

ssl_protocols TLSv1.2 TLSv1.3;

Contexto

http, server

Habilita os protocolos especificados.

Nota

Os parâmetros TLSv1.1 e TLSv1.2 funcionam apenas quando OpenSSL 1.0.1 ou superior é usado.

O parâmetro TLSv1.3 funciona apenas quando OpenSSL 1.1.1 ou superior é usado.

ssl_reject_handshake#

Sintaxe

ssl_reject_handshake on | off;

Padrão

ssl_reject_handshake off;

Contexto

http, server

Se habilitado, handshakes SSL no bloco server serão rejeitados.

Por exemplo, na seguinte configuração, handshakes SSL com nomes de servidor diferentes de example.com são rejeitados:

server {
    listen               443 ssl default_server;
    ssl_reject_handshake on;
}

server {
    listen              443 ssl;
    server_name         example.com;
    ssl_certificate     example.com.crt;
    ssl_certificate_key example.com.key;
}

ssl_session_cache#

Sintaxe

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

Padrão

ssl_session_cache none;

Contexto

http, server

Define os tipos e tamanhos de caches que armazenam parâmetros de sessão. Um cache pode ser de qualquer um dos seguintes tipos:

off

o uso de um cache de sessão é estritamente proibido: o Angie explicitamente informa ao cliente que as sessões não podem ser reutilizadas.

none

o uso de um cache de sessão é gentilmente desencorajado: o Angie informa ao cliente que as sessões podem ser reutilizadas, mas não armazena realmente os parâmetros de sessão no cache.

builtin

um cache integrado no OpenSSL; usado por apenas um processo worker. O tamanho do cache é especificado em sessões. Se o tamanho não for fornecido, é igual a 20480 sessões. O uso do cache integrado pode causar fragmentação de memória.

shared

um cache compartilhado entre todos os processos worker. O tamanho do cache é especificado em bytes; um megabyte pode armazenar cerca de 4000 sessões. Cada cache compartilhado deve ter um nome arbitrário. Um cache com o mesmo nome pode ser usado em vários servidores virtuais. Também é usado para gerar automaticamente, armazenar e rotacionar periodicamente chaves de ticket de sessão TLS, a menos que configurado explicitamente usando a diretiva ssl_session_ticket_key.

Ambos os tipos de cache podem ser usados simultaneamente, por exemplo:

ssl_session_cache builtin:1000 shared:SSL:10m;

mas usar apenas cache compartilhado sem o cache integrado deve ser mais eficiente.

ssl_session_ticket_key#

Sintaxe

ssl_session_ticket_key file;

Padrão

—

Contexto

http, server

Define um arquivo com a chave secreta usada para criptografar e descriptografar tickets de sessão TLS. A diretiva é necessária se a mesma chave precisa ser compartilhada entre múltiplos servidores. Por padrão, uma chave gerada aleatoriamente é usada.

Se várias chaves são especificadas, apenas a primeira chave é usada para criptografar tickets de sessão TLS. Isso permite configurar rotação de chaves, por exemplo:

ssl_session_ticket_key current.key;
ssl_session_ticket_key previous.key;

O arquivo deve conter 80 ou 48 bytes de dados aleatórios e pode ser criado usando o seguinte comando:

$ openssl rand 80 > ticket.key

Dependendo do tamanho do arquivo, AES256 (para chaves de 80 bytes) ou AES128 (para chaves de 48 bytes) será usado para criptografia.

ssl_session_tickets#

Sintaxe

ssl_session_tickets on | off;

Padrão

ssl_session_tickets on;

Contexto

http, server

Habilita ou desabilita a retomada de sessão através de tickets de sessão TLS.

ssl_session_timeout#

Sintaxe

ssl_session_timeout tempo;

Padrão

ssl_session_timeout 5m;

Contexto

http, server

Especifica um tempo durante o qual um cliente pode reutilizar os parâmetros de sessão.

ssl_stapling#

Sintaxe

ssl_stapling on | off;

Padrão

ssl_stapling off;

Contexto

http, server

Habilita ou desabilita o stapling de respostas OCSP pelo servidor. Exemplo:

ssl_stapling on;
resolver 127.0.0.53;

Para que o stapling OCSP funcione, o certificado do emissor do certificado do servidor deve ser conhecido. Se o arquivo ssl_certificate não contiver certificados intermediários, o certificado do emissor do certificado do servidor deve estar presente no arquivo especificado pela diretiva ssl_trusted_certificate.

Aviso

Para a resolução do nome do host do respondedor OCSP, a diretiva resolver também deve ser especificada.

ssl_stapling_file#

Sintaxe

ssl_stapling_file file;

Padrão

—

Contexto

http, server

Quando definido, a resposta OCSP anexada será obtida do arquivo especificado em vez de consultar o respondedor OCSP especificado no certificado do servidor.

O arquivo deve estar no formato DER conforme produzido pelo comando openssl ocsp.

ssl_stapling_responder#

Sintaxe

ssl_stapling_responder url;

Padrão

—

Contexto

http, server

Substitui o URI do respondedor OCSP especificado na extensão de certificado "Authority Information Access".

Apenas respondedores OCSP http:// são suportados:

ssl_stapling_responder http://ocsp.example.com/;

ssl_stapling_verify#

Sintaxe

ssl_stapling_verify on | off;

Padrão

ssl_stapling_verify off;

Contexto

http, server

Habilita ou desabilita a verificação de respostas OCSP pelo servidor.

Para que a verificação funcione, o certificado do emissor do certificado do servidor, o certificado raiz e todos os certificados intermediários devem ser configurados como confiáveis usando a diretiva ssl_trusted_certificate.

ssl_trusted_certificate#

Sintaxe

ssl_trusted_certificate file;

Padrão

—

Contexto

http, server

Especifica um arquivo com certificados CA confiáveis no formato PEM usado para verificar certificados de cliente e respostas OCSP se ssl_stapling estiver habilitado.

Em contraste com o conjunto de certificados definido por ssl_client_certificate, a lista desses certificados não será enviada aos clientes.

ssl_verify_client#

Sintaxe

ssl_verify_client on | off | optional | optional_no_ca;

Padrão

ssl_verify_client off;

Contexto

http, server

Habilita a verificação de certificados de cliente. O resultado da verificação é armazenado na variável $ssl_client_verify.

optional

solicita o certificado do cliente e o verifica se o certificado estiver presente.

optional_no_ca

solicita o certificado do cliente, mas não exige que seja assinado por um certificado CA confiável. Isso é destinado ao uso em casos quando um serviço externo ao Angie executa a verificação real do certificado.

ssl_verify_depth#

Sintaxe

ssl_verify_depth number;

Padrão

ssl_verify_depth 1;

Contexto

http, server

Define a profundidade de verificação na cadeia de certificados de cliente.

Processamento de erros#

O módulo http_ssl suporta vários códigos de erro não padrão que podem ser usados para redirecionamentos usando a diretiva error_page:

495

ocorreu um erro durante a verificação do certificado do cliente;

496

um cliente não apresentou o certificado obrigatório;

497

uma requisição regular foi enviada para a porta HTTPS.

O redirecionamento acontece após a requisição ser completamente analisada e as variáveis, como $request_uri, $uri, $args e outras, estarem disponíveis.

Variáveis integradas#

O módulo http_ssl suporta variáveis integradas:

$ssl_alpn_protocol#

retorna o protocolo selecionado pelo ALPN durante o handshake SSL, ou uma string vazia caso contrário.

$ssl_cipher#

retorna o nome da cifra usada para uma conexão SSL estabelecida.

$ssl_ciphers#

retorna a lista de cifras suportadas pelo cliente. Cifras conhecidas são listadas por nomes, desconhecidas são mostradas em hexadecimal, por exemplo:

AES128-SHA:AES256-SHA:0x00ff

Nota

A variável é totalmente suportada apenas quando usando OpenSSL versão 1.0.2 ou superior. Com versões mais antigas, a variável está disponível apenas para novas sessões e lista apenas cifras conhecidas.

$ssl_client_escaped_cert#

retorna o certificado do cliente no formato PEM (urlencoded) para uma conexão SSL estabelecida.

$ssl_client_fingerprint#

retorna a impressão digital SHA1 do certificado do cliente para uma conexão SSL estabelecida.

$ssl_client_i_dn#

retorna a string "issuer DN" do certificado do cliente para uma conexão SSL estabelecida de acordo com a RFC 2253.

$ssl_client_i_dn_legacy#

retorna a string "issuer DN" do certificado do cliente para uma conexão SSL estabelecida.

$ssl_client_raw_cert#

retorna o certificado do cliente no formato PEM para uma conexão SSL estabelecida.

$ssl_client_s_dn#

retorna a string "subject DN" do certificado do cliente para uma conexão SSL estabelecida de acordo com a RFC 2253.

$ssl_client_s_dn_legacy#

retorna a string "subject DN" do certificado do cliente para uma conexão SSL estabelecida.

$ssl_client_serial#

retorna o número de série do certificado do cliente para uma conexão SSL estabelecida.

$ssl_client_sigalg#

retorna o algoritmo de assinatura para o certificado do cliente para uma conexão SSL estabelecida.

Nota

A variável é suportada apenas quando usando OpenSSL versão 3.5 ou superior. Com versões mais antigas, o valor da variável será uma string vazia.

Nota

A variável está disponível apenas para novas sessões.

$ssl_client_v_end#

retorna a data de término do certificado do cliente.

$ssl_client_v_remain#

retorna o número de dias até o certificado do cliente expirar.

$ssl_client_v_start#

retorna a data de início do certificado do cliente.

$ssl_client_verify#

retorna o resultado da verificação do certificado do cliente: SUCCESS, FAILED:reason, e NONE se um certificado não estava presente.

$ssl_curve#

retorna a curva negociada usada para troca de chaves durante o handshake SSL. Curvas conhecidas são listadas por nomes, desconhecidas são mostradas em hexadecimal, por exemplo:

prime256v1

Nota

A variável é suportada apenas quando usando OpenSSL versão 3.0 ou superior. Com versões mais antigas, o valor da variável será uma string vazia.

$ssl_curves#

retorna a lista de curvas suportadas pelo cliente. Curvas conhecidas são listadas por nomes, desconhecidas são mostradas em hexadecimal, por exemplo:

0x001d:prime256v1:secp521r1:secp384r1

Nota

A variável é suportada apenas quando usando OpenSSL versão 1.0.2 ou superior. Com versões mais antigas, o valor da variável será uma string vazia.

Nota

A variável está disponível apenas para novas sessões.

$ssl_early_data#

retorna "1" se TLS 1.3 early data é usado e o handshake não está completo, caso contrário "".

$ssl_encrypted_hello#

Adicionado na versão 1.11.0.

retorna "1" se o ClientHello foi descriptografado por meio da extensão TLS Encrypted Client Hello (ECH), caso contrário "".

$ssl_protocol#

retorna o protocolo de uma conexão SSL estabelecida.

$ssl_server_cert_type#

assume os valores RSA, DSA, ECDSA, ED448, ED25519, SM2, RSA-PSS, ou unknown dependendo do tipo de certificado e chave do servidor.

$ssl_server_name#

retorna o nome do servidor solicitado através de SNI.

$ssl_session_id#

retorna o identificador de sessão de uma conexão SSL estabelecida.

$ssl_session_reused#

retorna "r" se uma sessão SSL foi reutilizada, ou "." caso contrário.

$ssl_sigalg#

retorna o algoritmo de assinatura para o certificado do servidor para uma conexão SSL estabelecida.

Nota

A variável é suportada apenas quando usando OpenSSL versão 3.5 ou superior. Com versões mais antigas, o valor da variável será uma string vazia.

Nota

A variável está disponível apenas para novas sessões.

$ssl_sigalgs#

retorna a lista de algoritmos de assinatura oferecidos pelo cliente durante o handshake SSL, como uma lista separada por dois pontos.

Nota

Com o OpenSSL versão 4.0 ou superior, os algoritmos são retornados por nome; um algoritmo sem nome recai em seu código hexadecimal bruto. As bibliotecas SSL que expõem a API de algoritmos de assinatura mais antiga retornam todos os algoritmos como códigos hexadecimais brutos. Compilações sem uma API de algoritmos de assinatura compatível retornam um valor vazio.