Pular para o conteúdo
ecdsa.com
OpenSSL (client side)CLI do OpenSSL

Mensagem de erro

SSL routines:ssl3_read_bytes:tlsv13 alert certificate required

Também aparece como

  • error:0A00045C:SSL routines::tlsv13 alert certificate required
  • SSL alert number 116

O OpenSSL imprime “error:0A00045C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required:…:SSL alert number 116”; o curl imprime “curl: (56) OpenSSL SSL_read: OpenSSL/<version>: error:0A00045C:SSL routines::tlsv13 alert certificate required, errno 0”. No TLS 1.2, a mesma situação costuma terminar, em vez disso, com handshake_failure (alerta 40).

OpenSSL (client side) — TLS 1.3 alert 116 (certificate_required) from a mutual-TLS server

O que significa

O servidor exige TLS mútuo e o cliente concluiu um handshake TLS 1.3 sem apresentar certificado, por isso o servidor respondeu com o alerta 116 (certificate_required). No TLS 1.3, o certificado de cliente é verificado depois que o cliente já considera o handshake concluído; é por isso que ferramentas como o curl informam o erro durante a primeira leitura (código de saída 56 do curl), e não durante a conexão.

Por que acontece

Como corrigir

  1. 1.

    Apresentar o certificado de cliente

    Passe o certificado e a chave privada ao cliente (curl --cert/--key, s_client -cert/-key, a opção de certificado de cliente da biblioteca HTTP).

    bash
    openssl s_client -connect mtls.example.com:443 -servername mtls.example.com \
      -cert client.pem -key client.key -brief </dev/null
    curl --cert client.pem --key client.key https://mtls.example.com/
  2. 2.

    Ler as CAs que o servidor aceita

    O openssl s_client mostra a lista “Acceptable client certificate CA names” que o servidor envia; a cadeia do seu certificado precisa levar a uma dessas CAs.

    bash
    # Which CAs does the server accept client certificates from?
    openssl s_client -connect mtls.example.com:443 -servername mtls.example.com </dev/null 2>/dev/null \
      | sed -n '/Acceptable client certificate CA names/,/^Requested/p'
  3. 3.

    Verificar o próprio certificado

    Ele precisa estar dentro do período de validade, ter sido emitido por uma CA aceita, e o extendedKeyUsage dele (se presente) precisa incluir clientAuth.

    bash
    # The client certificate must be valid, issued by an accepted CA, and allow clientAuth
    openssl x509 -in client.pem -noout -subject -issuer -dates -ext extendedKeyUsage

Erros relacionados

Ver toda a base de erros de assinatura