OpenSSL: PEM รูทีน: PEM_read_bio: no start line: pem_lib.c: 703: Expecting: TRUSTED CERTIFICATE [closed]


104

ฉันต้องการชื่อแฮชสำหรับไฟล์สำหรับโพสต์ในไดเรกทอรี CApath ของ Stunnel ฉันมีใบรับรองบางอย่างในไดเร็กทอรีนี้และใช้งานได้ดี นอกจากนี้ฉันมีเซิร์ฟเวอร์เซิร์ฟเวอร์และคีย์เซิร์ฟเวอร์:

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:

โพสต์เมื่อฉันสร้างc_hashสำหรับcert.pemนี่ไม่ใช่ 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:
...............

3
อาจช่วยให้คนอื่นที่ผมได้รับข้อผิดพลาดนี้เมื่อฉันผิดสลับkeyและcertไฟล์ในhttpsวัตถุการตั้งค่าให้กับ'swebpack.config devServer
tao

คำตอบ:


44
  1. เนื่องจากคุณใช้ Windows ตรวจสอบให้แน่ใจว่าใบรับรองของคุณใน Windows "เข้ากันได้" ที่สำคัญที่สุดคือไม่มี^Mในส่วนท้ายของแต่ละบรรทัด

    หากคุณเปิดมันจะมีลักษณะดังนี้:

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

    ในการแก้ปัญหา "this" ให้เปิดด้วยWriteหรือ Notepad ++ แล้วแปลงเป็น "style" ของ Windows

  2. ลองเรียกใช้openssl x509 -text -inform DER -in server_cert.pemและดูว่าผลลัพธ์คืออะไรไม่น่าจะเป็นไปได้ที่คีย์ส่วนตัว / ลับจะไม่น่าเชื่อถือจำเป็นต้องใช้ความไว้วางใจเฉพาะเมื่อคุณส่งออกคีย์จากที่เก็บคีย์


2
ลองเรียกใช้openssl x509 -hash -noout -inมันสกัดแฮชดูว่าช่วยได้ไหม?
Noam Rathaus

ที่มีประโยชน์ ขอบคุณ. แต่ในบันทึก 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 เหมือนกัน
Noam Rathaus

1
ขอบคุณopenssl x509 -text -inform DER -in server_cert.pemแปลงp7bใบรับรอง (?) ที่เข้ารหัสของฉันเป็นสิ่งที่ใช้งานได้
โคเอ็น.

3
ปัญหาของฉันไม่ใช่การลงท้ายบรรทัด CRLF ตามที่อธิบายไว้ที่นี่ แต่คำแนะนำนี้เพียงพอที่จะทำให้ฉันดำเนินการได้ ปัญหาของฉันคือไฟล์ของฉันถูกบันทึก Unicode สองไบต์ด้วย BOM และ openssl สำหรับ windows ไม่สามารถจัดการกับสิ่งนั้นได้ ฉันบันทึกใหม่เป็น ascii และได้ผล
Elroy Flynn

37

อีกสาเหตุที่เป็นไปได้คือพยายามใช้; x509; โมดูลในสิ่งที่ไม่ใช่ X.509

ใบรับรองเซิร์ฟเวอร์เป็นรูปแบบ X.509 แต่คีย์ส่วนตัวคือ RSA

ดังนั้น:

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

17

ความผิดพลาดของฉันคือการใช้ไฟล์ CSR แทนไฟล์ CERT


3
อย่างน้อยฉันก็ไม่ใช่คนเดียวที่ทำผิดพลาดนี้ ... ฉันแปลกใจที่โมดูลไม่แจ้งเตือนเราเรื่องนี้
edwardsmarkf

2
ฉันใช้เวลาหลายชั่วโมงในการออกกำลังกาย ทั้งหมดเริ่มต้นด้วยข้อผิดพลาดที่คลุมเครือจาก xmlsec1key is not found
Amichai Schreiber

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

ฉันมีข้อผิดพลาดที่คล้ายกัน การเปลี่ยนคำสั่งซื้อได้ผลสำหรับฉัน
Jon Richardson

คีย์ของฉันมาในไฟล์แยกต่างหากฉันต้องการสร้างไฟล์ใหม่:cat $SOURCE/privkey.pem $SOURCE/fullchain.pem > server.pem
ErichBSchulz

8

ฉันมีปัญหาเดียวกันกับการใช้ Windows ได้รับการแก้ไขหากเปิดใน Notepad ++ และเปลี่ยนการเข้ารหัสจาก "UCS-2 LE BOM" เป็น "UTF-8"


6

เปลี่ยนการเข้ารหัสใน notepad ++ UTF-8 กับ BOM นั่นคือวิธีที่ได้ผลสำหรับฉัน


1
ใช่ สิ่งนี้ได้ผลสำหรับฉัน หมายเหตุใบรับรอง PEM ที่ส่งออกจากยูทิลิตี้พวงกุญแจของ Apple ไม่มี BOM และจะทำให้บางโปรแกรมเสียไป
HughHughTeotl

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

หมายเหตุ: คำอธิบายของฉันเป็นการทำให้เข้าใจง่ายเพื่อความชัดเจน อ่านคำตอบนี้สำหรับข้อมูลเพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.