Saltar al contenido
ecdsa.com
OpenSSL CLI (openssl s_client / openssl verify)CLI de OpenSSL

Mensaje de error

verify error:num=18:self-signed certificate

También se muestra como

  • verify error:num=18:self signed certificate
  • Verify return code: 18 (self-signed certificate)
  • error 18 at 0 depth lookup: self-signed certificate

OpenSSL 3.x imprime «self-signed»; 1.1.1, «self signed». s_client muestra «verify error:num=18:…» y «Verify return code: 18 (…)»; openssl verify muestra «error 18 at 0 depth lookup: …».

OpenSSL CLI (openssl s_client / openssl verify) — X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT

Qué significa

Error 18 de OpenSSL (X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT): el certificado de profundidad 0 es autofirmado —su emisor es él mismo— y no está en el almacén de confianza. No hay ninguna CA por encima de él, así que ningún intermedio ni bundle puede ayudar: hay que confiar directamente en el certificado o sustituirlo por uno emitido por una CA.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Confirmar que el sujeto y el emisor son idénticos

    Si el sujeto es igual al emisor, el certificado es autofirmado; lo que debes comparar con el valor esperado es su huella digital.

    bash
    echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null \
      | openssl x509 -noout -subject -issuer -fingerprint -sha256
    # subject == issuer: self-signed
  2. 2.

    Confiar en ese certificado exacto para pruebas

    Usar el propio certificado como -CAfile hace que OpenSSL acepte exactamente ese certificado. Antes, confirma la huella digital por un canal de confianza.

    bash
    # Trust this exact certificate for a check (after confirming the fingerprint out of band)
    echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null | openssl x509 -out api.pem
    echo | openssl s_client -connect api.example.com:443 -servername api.example.com -CAfile api.pem 2>&1 | grep 'Verify return code'
  3. 3.

    Verificar una raíz contra sí misma

    Una raíz autofirmada solo se verifica cuando es el ancla de confianza: pásala como -CAfile.

    bash
    # Verifying a root CA certificate itself needs the root as its own trust anchor
    openssl verify -CAfile root.pem root.pem      # root.pem: OK

Errores relacionados

Explorar toda la base de datos de errores de firma