cfssl ejemplo falla en la verificación de la cadena de certificados

1

Recibo el siguiente error al intentar verificar la cadena de certificados de una raíz ficticia / intermediario / final PKI.

raíz generada de la siguiente manera:

mkdir {root,inter,end}
cfssl print-defaults config > root/root-config.json
cfssl print-defaults csr > root/root-csr.json
cfssl genkey -initca root/root-csr.json | cfssljson -bare root/root

e intermediario:

cfssl print-defaults config > inter/inter-config.json
cfssl print-defaults csr > inter/inter-csr.json
cfssl genkey -initca inter/inter-csr.json | cfssljson -bare inter/inter

firma el intermediario con la raíz:

cfssl sign -ca root/root.pem -ca-key root/root-key.pem inter/inter.csr | cfssljson -bare inter/inter

Puedo verificar el certificado intermediario:

openssl verify -CAfile root/root.pem inter/inter.pem
inter/inter.pem: OK

Luego cree el certificado de usuario final:

cfssl print-defaults csr > end/end-csr.json
cfssl genkey end/end-csr.json | cfssljson -bare end/end
cfssl sign -ca inter/inter.pem -ca-key inter/inter-key.pem end/end.csr | cfssljson -bare end/end

Puedo empaquetar la cadena de certificados:

mkbundle root/root.pem inter/inter.pem

Y verifique el certificado de intermediario en su contra (obv)

openssl verify -CAfile cert-bundle.crt inter/inter.pem
inter/inter.pem: OK

pero cuando intento verificar que el certificado final es un certificado válido en esa cadena:

openssl verify -CAfile cert-bundle.crt end/end.pem

Recibo el siguiente error:

C = US, ST = CA, L = San Francisco, CN = example.net
error 7 at 0 depth lookup: certificate signature failure
error end/end.pem: verification failed
139745623078144:error:0D0C5006:asn1 encoding routines:ASN1_item_verify:EVP    lib:../crypto/asn1/a_verify.c:174:

Estoy usando los valores y configuraciones predeterminados de csr:

csr:

{
    "CN": "example.net",
    "hosts": [
        "example.net",
        "www.example.net"
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "ST": "CA",
            "L": "San Francisco"
        }
    ]
}

así como las configuraciones de CA predeterminadas:

{
    "signing": {
        "default": {
            "expiry": "168h"
        },
        "profiles": {
            "www": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            },
            "client": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            }
        }
    }
}

Parece que el certificado final no está codificado correctamente para openssl verify . Esto podría tener algo que no cambie los nombres de los sujetos en la CSR. Pero tenía curiosidad por si se trataba de un problema común o si utilizaba mal las herramientas.

EDITAR: Estoy bastante seguro de que hay algunas cosas que estoy haciendo mal:

  1. solo necesitas 1 config para la cadena de certificados
  2. en lugar de usar cfssl genkey use cfssl gencert y especifique la autoridad de certificación para la que está emitiendo el CSR
  3. agregue 'certificado' como "uso" en el perfil
  4. usar nombres comunes únicos

No resolví los problemas exactos con este método, pero este artículo del blog produjo un certificado válido para mí:

enlace

    
pregunta cannadayr 13.04.2018 - 19:46
fuente

0 respuestas

Lea otras preguntas en las etiquetas