OpenSSL: Quy trình PEM: PEM_read_bio: không có dòng bắt đầu: pem_lib.c: 703: Kỳ vọng: CHỨNG NHẬN TIN TƯỞNG [đã đóng]


100

Tôi cần tên băm cho tệp để đăng trong thư mục CApath của Stunnel. Tôi đã có một số chứng chỉ trong thư mục này và chúng đang hoạt động tốt. Ngoài ra, tôi có một sert máy chủ và khóa máy chủ:

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

Khi tôi cố gắng tính toán một hàm băm của chứng chỉ mới của mình, tôi gặp lỗi:

/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

Như tôi hiểu, tôi phải ký vào chứng chỉ của mình, nhưng tôi không hiểu làm thế nào tôi có thể làm điều đó. Vui lòng cung cấp giải pháp.

Tái bút:

Thông điệp

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

được đăng khi tôi tạo c_hash cho cert.pem Đây không phải là server_cert.pem, đây là Root_CA và nó có nội dung giống như

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

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

Khi tôi viết

openssl x509 -noout -text -in cert.pem

Trong bảng điều khiển, tôi thấy thông tin này:

    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
Có thể giúp người khác, tôi đã gặp lỗi này khi tôi đã hoán đổi nhầm keycertcác tệp trong httpsđối tượng cấu hình được cung cấp cho webpack.config's devServer.
tao

Câu trả lời:


43
  1. Vì bạn đang sử dụng Windows, hãy đảm bảo rằng chứng chỉ của bạn trong Windows "tương thích", quan trọng nhất là nó không có ^Mở cuối mỗi dòng

    Nếu bạn mở nó ra, nó sẽ trông như thế này:

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

    Để giải quyết "cái này", hãy mở nó bằng Writehoặc Notepad ++ và chuyển nó sang "style" Windows

  2. Hãy thử chạy openssl x509 -text -inform DER -in server_cert.pemvà xem kết quả là gì, chắc chắn khóa riêng / bí mật sẽ không đáng tin cậy, chỉ cần tin cậy nếu bạn xuất khóa từ kho khóa phải không?


2
Hãy thử chạy điều này, openssl x509 -hash -noout -innó thực hiện trích xuất băm, xem nó có giúp ích gì không?
Noam Rathaus

điều đó hữu ích. Cảm ơn. Nhưng trong nhật ký STunnel, tôi thấy lỗi 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 socketkhi thử thực hiện kết nối
lsv 30/12/13

Điều đó có nghĩa một cái gì đó khác hoàn toàn, có nghĩa là cả hai bên đều không sử dụng cùng cavới chứng chỉ CA của họ
Noam Rathaus

1
Cảm ơn, đã openssl x509 -text -inform DER -in server_cert.pemchuyển đổi p7bchứng chỉ được mã hóa (?) Của tôi thành chứng chỉ có thể sử dụng được.
Koen.

3
Vấn đề của tôi không phải là kết thúc dòng CRLF như được mô tả ở đây, nhưng gợi ý này đủ để giúp tôi đi đúng hướng. Vấn đề của tôi là tệp của tôi đã được lưu Unicode hai byte với BOM và openssl dành cho windows không thể giải quyết điều đó. Tôi đã lưu lại dưới dạng ascii và nó đã hoạt động.
Elroy Flynn

35

Một nguyên nhân có thể khác của điều này là cố gắng sử dụng mô-đun x509 trên thứ gì đó không phải là x509

Chứng chỉ máy chủ có định dạng x509, nhưng khóa cá nhân là rsa

Vì thế,

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

14

Tình hình của tôi hơi khác một chút. Giải pháp là tách .pem khỏi mọi thứ bên ngoài phần CHỨNG NHẬN và KHÓA RIÊNG TƯ và đảo ngược thứ tự xuất hiện của chúng. Sau khi chuyển đổi từ tệp pfx sang tệp pem, chứng chỉ trông như thế này:

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

Sau khi sửa tệp, nó chỉ là:

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

M kinda noob, xin đề nghị me..How để chỉnh sửa tập tin này trong mac
shubhamkes

Tôi đã gặp một lỗi tương tự. Đảo ngược thứ tự đã làm việc cho tôi.
Jon Richardson

Chìa khóa của tôi đến trong các tập tin riêng biệt tôi cần phải tạo ra một tập tin mới:cat $SOURCE/privkey.pem $SOURCE/fullchain.pem > server.pem
ErichBSchulz

14

Sai lầm của tôi chỉ đơn giản là sử dụng tệp CSR thay vì tệp CERT.


2
ít nhất tôi không phải là người duy nhất mắc lỗi này ... tôi ngạc nhiên là mô-đun không cảnh báo chúng tôi về điều này.
edwardsmarkf

1
điều này khiến tôi mất hàng giờ để giải quyết. Tất cả bắt đầu với một lỗi khó hiểu từ xmlsec1,key is not found
Amichai Schreiber

8

Tôi đã gặp sự cố tương tự khi sử dụng Windows, đã gặp phải nếu được khắc phục bằng cách mở nó trong Notepad ++ và thay đổi mã hóa từ "UCS-2 LE BOM" thành "UTF-8".


6

Thay đổi mã hóa trong notepad ++ UTF-8 với BOM . Đó là cách nó làm việc cho tôi


1
Đúng! Điều này đã làm việc cho tôi. Lưu ý Các chứng chỉ PEM được xuất từ ​​tiện ích Keychain của Apple không có BOM và điều này làm đảo lộn một số chương trình.
HughHughTeotl

5

Bạn có thể nhận được lỗi gây hiểu lầm này nếu bạn ngây thơ cố gắng để làm điều này:

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

Thiết kế không cho phép mã hóa dữ liệu bằng khóa riêng .

Bạn có thể thấy từ các tùy chọn dòng lệnh cho ssl đang mở rằng các tùy chọn duy nhất để encrypt -> decryptđi theo một hướng public -> private.

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

Hướng khác được ngăn chặn một cách có chủ ý vì về cơ bản các khóa công khai "có thể đoán được." Vì vậy, mã hóa bằng khóa riêng có nghĩa là điều duy nhất bạn có được là xác minh tác giả có quyền truy cập vào khóa riêng.

Các private key encrypt -> public key decrypthướng được gọi là "ký" để phân biệt nó từ một kỹ thuật mà có thể dữ liệu thực sự an toàn.

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

Lưu ý: mô tả của tôi là đơn giản hóa để rõ ràng. Đọc câu trả lời này để biết thêm thông tin .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.