esempio di verifica della catena di certificati dell'esempio cfssl

1

Ricevo il seguente errore quando provo a verificare la catena di certificati di una radice fittizia / intermediario / terminale PKI.

root generato come segue:

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 l'intermediario con la radice:

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

Posso verificare il certificato intermedio:

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

Quindi crea il certificato dell'utente finale:

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

Posso raggruppare la catena di certificati:

mkbundle root/root.pem inter/inter.pem

E verifica il cert intermedio contro di esso (obv)

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

ma quando provo a verificare che il certificato finale sia un certificato valido in quella catena:

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

Ho ricevuto il seguente errore:

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:

Sto usando il csr e le configurazioni di default:

CSR:

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

così come le configurazioni di CA predefinite:

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

Sembra che il certificato finale non sia codificato correttamente per openssl verify . Questo potrebbe avere qualcosa per me non cambiare i nomi dei soggetti nel CSR. Ma era curioso se questo fosse un problema comune o io stavo usando gli strumenti sbagliati.

EDIT: Sono abbastanza sicuro che ci siano alcune cose che sto facendo male:

  1. hai solo bisogno di 1 config per la catena di certificati
  2. invece di utilizzare cfssl genkey usa cfssl gencert e specifica l'autorità di certificazione che stai emettendo il CSR per
  3. aggiungi "segno cert" come "utilizzo" nel profilo
  4. usa nomi comuni univoci

Non ho risolto i problemi esatti con questo metodo, ma questo articolo del blog ha prodotto per me un certificato valido:

link

    
posta cannadayr 13.04.2018 - 19:46
fonte

0 risposte

Leggi altre domande sui tag