OpenSSL:PEM例程:PEM_read_bio:无起始行:pem_lib.c:703:正在期待:可信任证书[关闭]


100

我需要文件的哈希名称,以便在Stunnel的CApath目录中发布。我在此目录中有一些证书,它们运行良好。另外,我有一个服务器sert和服务器密钥:

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

当我尝试计算新证书的哈希值时,出现错误:

/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

据我了解,我必须签署证书,但我不知道该怎么做。请提供解决方案。

PS:

讯息

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

我为cert.pem制作c_hash时发布的信息这不是server_cert.pem,这是Root_CA,内容类似

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

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

当我写

openssl x509 -noout -text -in cert.pem

在控制台面板中,我看到以下信息:

    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
可以帮助别人,我得到这个错误时,我错误地交换keycert文件中https的配置对象提供webpack.configdevServer

Answers:


43
  1. 由于您使用的是Windows,因此请确保Windows中的证书“兼容”,最重要的是,该证书不在^M每行末尾

    如果将其打开,它将如下所示:

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

    要解决“此”问题,请使用Write或Notepad ++将其打开,然后将其转换为Windows“样式”

  2. 尝试运行openssl x509 -text -inform DER -in server_cert.pem并查看输出结果,私钥/秘密密钥不太可能是不可信的,仅当您从密钥库中导出密钥时才需要信任吗?


2
尝试运行openssl x509 -hash -noout -in它进行哈希提取,看看是否有帮助?
Noam Rathaus 2013年

这很有用。谢谢。但是在STunnel日志中,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 socket当我尝试进行ro连接时会看到错误
lsv

这意味着别的东西完全,这意味着双方都没有使用相同的ca为他们的CA证书
诺姆市政厅

1
谢谢,openssl x509 -text -inform DER -in server_cert.pem将我的p7b编码(?)证书转换为可用的东西。
科恩

3
我的问题不是这里描述的CRLF行尾,但是这个建议足以使我步入正轨。我的问题是我的文件用BOM表保存了双字节Unicode,而windows的openssl无法处理。我以ascii格式保存,并且有效。
Elroy Flynn

35

另一个可能的原因是尝试在非x509的东西上使用x509模块

服务器证书为x509格式,但私钥为rsa

所以,

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

14

我的情况有些不同。解决方案是从证书和私钥部分之外的所有内容中剥离.pem并反转它们出现的顺序。从pfx转换为pem文件后,证书如下所示:

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

更正文件后,它只是:

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

M kinda noob,建议我。.如何在Mac中编辑此文件
shubhamkes

我有一个类似的错误。倒序对我有用。
乔恩·理查森

我的密钥来自创建新文件所需的单独文件中:cat $SOURCE/privkey.pem $SOURCE/fullchain.pem > server.pem
ErichBSchulz

14

我的错误只是使用CSR文件而不是CERT文件。


2
至少我不是唯一一个犯此错误的人。。。我很惊讶该模块没有提醒我们这一点。
edwardsmarkf

1
这花了我几个小时才能解决。所有这些都始于xmlsec1的一个隐秘错误key is not found
Amichai Schreiber,

8

我在使用Windows时遇到了同样的问题,可以通过在Notepad ++中打开它并将编码方式从“ UCS-2 LE BOM”更改为“ UTF-8”来解决。



5

如果您天真地尝试执行此操作,则会得到此误导性错误:

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

设计不允许使用私钥加密数据

您可以从open ssl命令行选项中看到,唯一的选项encrypt -> decrypt朝一个方向发展public -> private

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

故意防止另一个方向,因为基本上可以“猜测”公钥。因此,使用私钥加密意味着您获得的唯一好处就是验证作者是否可以访问私钥。

private key encrypt -> public key decrypt方向称为“签名”,以区别于实际上可以保护数据的技术。

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

注意:我的描述只是为了简化起见。阅读此答案以获取更多信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.