124

我需要一个散列名称来发布在 Stunnel 的 CApath 目录中的文件。我在这个目录中有一些证书,它们运行良好。另外,我有一个服务器序列和服务器密钥:

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:
...............
4

7 回答 7

50
  1. 由于您在 Windows 上,请确保您在 Windows 中的证书“兼容”,最重要的是它没有^M在每一行的末尾

    如果你打开它,它会是这样的:

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

    要解决“这个”问题,请使用WriteNotepad++ 打开它并将其转换为 Windows“样式”

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

于 2013-12-30T10:01:43.660 回答
45

另一个可能的原因是尝试使用 ;x509; 模块在不是 X.509 的东西上。

服务器证书是 X.509 格式,但私钥是 RSA。

所以:

openssl rsa -noout -text -in privkey.pem
openssl x509 -noout -text -in servercert.pem
于 2017-07-14T05:31:12.460 回答
20

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

于 2018-03-02T13:36:21.363 回答
15

我的情况有点不同。解决方案是从 CERTIFICATE 和 PRIVATE KEY 部分之外的所有内容中删除 .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-----
于 2015-05-20T12:42:35.473 回答
12

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

于 2015-12-30T06:13:29.577 回答
8

使用 BOM更改 notepad++ UTF-8 中的编码。这就是它对我有用的方式

于 2017-09-30T11:00:41.447 回答
6

如果你天真地尝试这样做,你可能会得到这个误导性错误:

[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

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

于 2017-05-23T08:02:52.423 回答