OpenSSL: Rotinas PEM: PEM_read_bio: sem linha inicial: pem_lib.c: 703: Esperando: CERTIFICADO CONFIÁVEL [fechado]

100

Eu preciso de um nome de hash para o arquivo a ser postado no diretório CApath do Stunnel. Eu tenho alguns certificados neste diretório e eles estão funcionando bem. Além disso, tenho um servidor e uma chave de servidor:

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

Quando tento calcular um hash do meu novo certificado, recebo um erro:

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

unable to load certificate 140603809879880:error:0906D06C:PEM
routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE

Pelo que entendi, devo assinar meu certificado, mas não entendo como posso fazer isso. Por favor, forneça a solução.

PS:

A mensagem

unable to load certificate 140603809879880:error:0906D06C:PEM
routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE:

postado quando fiz c_hash para cert.pem Este não é server_cert.pem, este é Root_CA e é um conteúdo parecido com

-----BEGIN CERTIFICATE-----  
...6UXBNSDVg5rSx60=.. 

-----END CERTIFICATE-----

Quando eu escrevo

openssl x509 -noout -text -in cert.pem

No painel do console, vejo esta informação:

    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:
...............
lsv
fonte
1
Poderia ajudar alguém, eu tenho esse erro quando eu erroneamente trocados keye certarquivos em httpsobjeto de configuração fornecido para webpack.config's devServer.
tao

Respostas:

43
  1. Como você está no Windows, certifique-se de que seu certificado no Windows seja "compatível", principalmente que não tenha ^Mno final de cada linha

    Se você abrir, terá a seguinte aparência:

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

    Para resolver "isso", abra-o com o WriteNotepad ++ e converta-o para o "estilo" do Windows

  2. Tente executar openssl x509 -text -inform DER -in server_cert.peme ver qual é a saída, é improvável que uma chave privada / secreta não seja confiável, a confiança só é necessária se você exportou a chave de um armazenamento de chaves, não é?

Noam Rathaus
fonte
2
Tente rodar openssl x509 -hash -noout -inele faz extração de hash, vê se ajuda?
Noam Rathaus
isso é útil. Obrigado. Mas no log do STunnel, vejo o erro SSL_accept: 14094418: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socketquando tento fazer a conexão
lsv
Isso significa outra coisa, significa que ambos os lados não estão usando o mesmo capara seu certificado CA
Noam Rathaus
1
Obrigado, openssl x509 -text -inform DER -in server_cert.pemconverti meu p7bcertificado codificado (?) Em algo utilizável.
Koen.
3
Meu problema não era terminações de linha CRLF conforme descrito aqui, mas essa sugestão foi suficiente para me colocar no caminho certo. Meu problema era que meu arquivo foi salvo em Unicode de byte duplo com um BOM e o openssl para Windows não conseguiu lidar com isso. Salvei novamente como ASCII e funcionou.
Elroy Flynn
35

Outra possível causa disso é tentar usar o módulo x509 em algo que não seja x509

O certificado do servidor está no formato x509, mas a chave privada é rsa

Assim,

openssl rsa -noout -text -in privkey.pem
openssl x509 -noout -text -in servercert.pem
Rondó
fonte
14

Minha situação era um pouco diferente. A solução foi retirar o .pem de tudo o que estava fora das seções CERTIFICADO e CHAVE PRIVADA e inverter a ordem em que apareceram. Depois de converter do arquivo pfx para pem, o certificado ficou assim:

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

Depois de corrigir o arquivo, era apenas:

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Gustavo da Silva Serra
fonte
M meio noob, por favor me sugira .. Como editar este arquivo em mac
shubhamkes
Eu tive um erro semelhante. Inverter a ordem funcionou para mim.
Jon Richardson
Minhas chaves vieram em arquivos separados. Eu precisei criar um novo arquivo:cat $SOURCE/privkey.pem $SOURCE/fullchain.pem > server.pem
ErichBSchulz
14

Meu erro foi simplesmente usar o arquivo CSR em vez do arquivo CERT.

SpiRail
fonte
2
pelo menos eu não sou o único que cometeu este erro ... estou surpreso que o módulo não nos alerta para isso.
edwardsmarkf
1
isso me levou horas para resolver. Tudo começando com um erro críptico de xmlsec1,key is not found
Amichai Schreiber
8

Tive o mesmo problema no Windows, resolvi abri-lo no Notepad ++ e alterar a codificação de "UCS-2 LE BOM" para "UTF-8".

Peter n
fonte
6

Altere a codificação no notepad ++ UTF-8 com BOM . É assim que funcionou para mim

Yoda Zemichael
fonte
1
Sim! Isso funcionou para mim. Nota Os certificados PEM exportados do utilitário Keychain da Apple não têm o BOM e isso perturba alguns programas.
HughHughTeotl
5

Você pode obter esse erro enganoso se tentar fazer isso ingenuamente :

[clear] -> Private Key Encrypt -> [encrypted] -> Public Key Decrypt -> [clear]

Criptografar dados usando uma chave privada não é permitido por design .

Você pode ver nas opções de linha de comando para abrir SSL que as únicas opções encrypt -> decryptseguem em uma direção public -> private.

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

A outra direção é intencionalmente evitada porque as chaves públicas basicamente "podem ser adivinhadas". Portanto, criptografar com uma chave privada significa que a única coisa que você ganha é verificar se o autor tem acesso à chave privada.

A private key encrypt -> public key decryptdireção é chamada de "assinatura" para diferenciá-la de uma técnica que pode realmente proteger os dados.

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

Nota: minha descrição é uma simplificação para maior clareza. Leia esta resposta para mais informações .

TrophyGeek
fonte