OpenSSL: routine PEM: PEM_read_bio: nessuna riga iniziale: pem_lib.c: 703: Aspettativa: CERTIFICATO DI FIDUCIA

Ho bisogno di un nome hash per il file per la pubblicazione nella directory CApath di Stunnel. Ho alcuni certificati in questa directory e stanno funzionando bene. Inoltre ho un server sert e la chiave del server:

cert = c:\Program Files (x86)\stunnel\server_cert.pem key = c:\Program> Files (x86)\stunnel\private\server_key.pem 

Quando provo a calcolare un hash del mio nuovo certificato, ottengo un errore:

/ etc / pki / tls / misc / c_hash cert.pem

imansible caricare il certificato 140603809879880: errore: 0906D06C: routine PEM: PEM_read_bio: nessuna riga iniziale: pem_lib.c: 703: Aspettativa: CERTIFICATO DI FIDUCIA

Come ho capito, devo firmare il mio certificato, ma non capisco come posso farlo. Per favore, fornisci la soluzione.

PS:

Il messaggio

imansible caricare il certificato 140603809879880: errore: 0906D06C: routine PEM: PEM_read_bio: nessuna riga iniziale: pem_lib.c: 703: Aspettativa: CERTIFICATO DI FIDUCIA:

postato quando ho creato c_hash per cert.pem Questo non è server_cert.pem, questo è Root_CA ed è contenuto qualcosa come

—– INIZIO CERTIFICATO —–
… 6UXBNSDVg5rSx60 = ..

—– CERTIFICATO DI FINE —–

Quando scrivo

openssl x509 -noout -text -in cert.pem

Nel pannello della console vedo queste informazioni:

  Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=BE, ST=BB, L=BB, O=BANKSYS NV, OU=SCY, CN=TEST Root CA Validity Not Before: May 31 08:06:40 2005 GMT Not After : May 31 08:06:40 2020 GMT Subject: C=BE, ST=BB, L=BB, O=BB NV, OU=SCY, CN=TEST Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:82:c8:58:1e:e5:7a:b2:63:a6:15:bd:f9:bb:1f: ............ Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 76:70:AB:92:9B:B1:26:CE:9E:93:D8:77:4F:78:0D:B8:D4:6C:DA:C6 Signature Algorithm: sha1WithRSAEncryption 2c:7e:bd:3f:da:48:a4:df:8d:7c:96:58:f7:87:bd:e7:16:24: ............... 

    1. Dato che sei su Windows, assicurati che il tuo certificato in Windows sia “compatibile”, soprattutto che non abbia ^M alla fine di ogni riga

      Se lo apri sarà simile a questo:

       -----BEGIN CERTIFICATE-----^M MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M 

      Per risolvere “questo” aprirlo con Write o Notepad ++ e convertirlo in Windows “style”

    2. Prova ad eseguire openssl x509 -text -inform DER -in server_cert.pem e vedere qual è l’output, è improbabile che una chiave privata / segreta non sia attendibile, è necessaria la fiducia solo se hai esportato la chiave da un keystore, hai fatto ?

    Un’altra ansible causa di ciò è provare a utilizzare il modulo x509 su qualcosa che non è x509

    Il certificato del server è in formato x509, ma la chiave privata è rsa

    Quindi openssl rsa -noout -text -in privkey.pem openssl x509 -noout -text -in servercert.pem

    La mia situazione era leggermente diversa. La soluzione consisteva nel togliere il .pem da qualsiasi cosa al di fuori delle sezioni CERTIFICATO e TASTO PRIVATO e invertire l’ordine in cui apparivano. Dopo la conversione da pfx a pem, il certificato assomigliava a questo:

     Bag Attributes localKeyID: ... issuer=... -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- Bag Attributes more garbage... -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY----- 

    Dopo aver corretto il file, era solo:

     -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- 

    Ho avuto lo stesso problema con Windows, ottenuto se risolto aprendolo in Notepad ++ e cambiando la codifica da “UCS-2 LE BOM” a “UTF-8”.

    È ansible ottenere questo errore fuorviante se si tenta ingenuamente di fare questo:

     Plain text -> Private Key encrypt ->  -> Public Key decrypt -> 

    La crittografia dei dati utilizzando una chiave privata non è consentita dalla progettazione .

    Puoi vedere dalle opzioni della riga di comando per aprire ssl che le uniche opzioni per encrypt -> decrypt andare in una direzione public -> private .

      -encrypt encrypt with public key -decrypt decrypt with private key 

    L’altra direzione è intenzionalmente impedita perché le chiavi pubbliche “possono essere indovinate”. Quindi, la crittografia con una chiave privata significa che l’unica cosa che ottieni è verificare che l’autore abbia accesso alla chiave privata.

    La private key encrypt -> public key decrypt è chiamata “firma” per differenziarla dall’essere una tecnica che può effettivamente proteggere i dati.

      -sign sign with private key -verify verify with public key 

    Nota: la mia descrizione è una semplificazione per chiarezza. Leggi questa risposta per maggiori informazioni .

    Il mio errore era semplicemente usare il file CSR invece del file CERT.

    Cambia la codifica in notepad ++ UTF-8 con BOM . È così che ha funzionato per me