OpenSSL: PEM rutinleri: PEM_read_bio: başlangıç ​​satırı yok: pem_lib.c: 703: Beklenen: GÜVENİLİR SERTİFİKA [kapalı]


101

Stunnel'ın CApath dizinine göndermek için dosya için bir karma ada ihtiyacım var. Bu dizinde bazı sertifikalarım var ve iyi çalışıyorlar. Ayrıca bir sunucu sert ve sunucu anahtarım var:

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

Yeni sertifikamın bir karmasını hesaplamaya çalıştığımda bir hata alıyorum:

/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

Anladığım kadarıyla sertifikamı imzalamalıyım, ancak bunu nasıl yapabileceğimi anlamıyorum. Lütfen çözümü sağlayın.

Not:

Mesaj

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

cert.pem için c_hash yaptığımda gönderildi Bu server_cert.pem değil, bu Root_CA ve şunun gibi bir içerik

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

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

Yazdığım zaman

openssl x509 -noout -text -in cert.pem

Konsol panelinde şu bilgileri görüyorum:

    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
Başka birine yardımcı olabilir, bu hatayı yanlış bir şekilde değiştirdiğimde keyve 's' e sağlanan yapılandırma nesnesindeki certdosyalarımda aldım . httpswebpack.configdevServer
tao

Yanıtlar:


43
  1. Windows'ta olduğunuz için, Windows'daki sertifikanızın "uyumlu" olduğundan, en önemlisi ^Mher satırın sonunda bulunmadığından emin olun.

    Açarsan şöyle görünecek:

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

    "Bunu" çözmek için Writeveya Notepad ++ ile açın ve Windows "stiline" dönüştürmesini sağlayın

  2. Çalıştırmaya openssl x509 -text -inform DER -in server_cert.pemve çıktının ne olduğunu görmeye çalışın , özel / gizli bir anahtarın güvenilmez olması olası değildir, yalnızca anahtarı bir anahtar deposundan dışa aktardıysanız güvene ihtiyaç vardır, değil mi?


2
Bunu çalıştırmayı deneyin openssl x509 -hash -noout -in, hash çıkarma yapıyor, bakalım yardımcı olacak mı?
Noam Rathaus

bu yararlı. Teşekkürler. Ancak STunnel günlüğünde 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 socketbağlantı kurmaya çalıştığımda hatayı görüyorum
lsv

Bu tamamen başka bir anlama geliyor, bu iki tarafın da caCA sertifikaları için aynı şeyi kullanmadığı anlamına geliyor
Noam Rathaus

1
Teşekkürler, kodlanmış (?) Sertifikamı kullanılabilir bir şeye openssl x509 -text -inform DER -in server_cert.pemdönüştürdüm p7b.
Koen.

3
Benim sorunum burada açıklandığı gibi CRLF satır sonları değildi, ancak bu öneri beni yoluna sokmak için yeterliydi. Benim sorunum, dosyamın bir BOM ile çift baytlık Unicode kaydedilmiş olması ve windows için openssl'nin bununla başa çıkamamasıydı. Ascii olarak yeniden kaydettim ve işe yaradı.
Elroy Flynn

35

Bunun bir başka olası nedeni, x509 modülünü x509 olmayan bir şey üzerinde kullanmaya çalışmaktır.

Sunucu sertifikası x509 biçimindedir, ancak özel anahtar rsa'dır

Yani,

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

15

Benim hatam CERT dosyası yerine CSR dosyasını kullanmaktı.


2
en azından bu hatayı yapan ben değilim ... modülün bizi bu konuda uyarmamasına şaşırdım.
edwardsmarkf

1
Çalışmam saatler sürdü. Her şey xmlsec1'den gelen şifreli bir hatayla başlıyor,key is not found
Amichai Schreiber

14

Durumum biraz farklıydı. Çözüm, .pem'i SERTİFİKA ve ÖZEL ANAHTAR bölümlerinin dışındaki her şeyden çıkarmak ve göründükleri sırayı tersine çevirmekti. Pfx'ten pem dosyasına dönüştürüldükten sonra, sertifika şu şekilde görünüyordu:

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

Dosyayı düzelttikten sonra sadece:

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

M kinda noob, pls beni öner ... Bu dosya mac'ta nasıl düzenlenir
shubhamkes

Benzer bir hatam vardı. Siparişi tersine çevirmek benim için çalıştı.
Jon Richardson

Anahtarlarım yeni bir dosya oluşturmak için ihtiyacım olan ayrı dosyalar halinde geldi:cat $SOURCE/privkey.pem $SOURCE/fullchain.pem > server.pem
ErichBSchulz

8

Windows kullanırken de aynı sorunu yaşadım, bunu Notepad ++ ile açarak ve kodlamayı "UCS-2 LE BOM" dan "UTF-8" e değiştirerek düzeltildim.


6

BOM ile notepad ++ UTF-8'deki kodlamayı değiştirin . Benim için böyle çalıştı


1
Evet! Bu benim için çalıştı. Not Apple'ın Anahtar Zinciri yardımcı programından dışa aktarılan PEM sertifikalarında BOM yoktur ve bu, bazı programları rahatsız eder.
HughHughTeotl

5

Bunu safça yapmaya çalışırsanız, bu yanıltıcı hatayı alabilirsiniz :

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

Verilerin özel bir anahtar kullanılarak şifrelenmesine tasarım gereği izin verilmez .

Sen de görebileceğiniz açık SSL için komut satırı seçenekleri tek seçenekleri için o encrypt -> decrypttek yönde gitmek public -> private.

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

Diğer yön kasıtlı olarak engellenmiştir çünkü genel anahtarlar temelde "tahmin edilebilir". Bu nedenle, özel bir anahtarla şifreleme, kazandığınız tek şeyin yazarın özel anahtara erişimi olduğunu doğrulamak anlamına gelir.

private key encrypt -> public key decryptYönü bir teknik olabilir aslında güvenli veri olmaktan ayırt etmek "imza" denir.

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

Not: Açıklamam, açıklık için bir basitleştirmedir. Daha fazla bilgi için bu cevabı okuyun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.