OpenSSL: PEM दिनचर्या: PEM_read_bio: नो स्टार्ट लाइन: pem_lib.c: 703: उम्मीद: प्रमाणित प्रमाण पत्र [बंद]


100

मुझे 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

जैसा कि मैं समझता हूं कि मुझे अपने प्रमाणपत्र पर हस्ताक्षर करना चाहिए, लेकिन मुझे समझ में नहीं आता कि मैं ऐसा कैसे कर सकता हूं। कृपया, समाधान प्रदान करें।

पुनश्च:

संदेश

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

1
बाकी आ सकता है कोई, मैं जब मैं गलत तरीके से बदली यह त्रुटि आई keyऔर certमें फाइल httpsconfig वस्तु को प्रदान की जाती webpack.configहै devServer
ताओ

जवाबों:


43
  1. चूंकि आप विंडोज पर हैं, तो सुनिश्चित करें कि विंडोज में आपका प्रमाण पत्र "संगत" है, सबसे महत्वपूर्ण बात यह है कि यह ^Mप्रत्येक पंक्ति के अंत में नहीं है

    यदि आप इसे खोलते हैं तो यह इस तरह दिखेगा:

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

    "इस" को हल करने के लिए इसे Writeनोटपैड ++ के साथ खोलें या इसे विंडोज "स्टाइल" में बदल दें।

  2. चलाने की कोशिश करें openssl x509 -text -inform DER -in server_cert.pemऔर देखें कि आउटपुट क्या है, यह संभावना नहीं है कि एक निजी / गुप्त कुंजी को अविश्वास किया जाएगा, विश्वास की आवश्यकता केवल तभी है जब आप कीस्टोर से कुंजी निर्यात करते हैं, क्या आपने?


2
openssl x509 -hash -noout -inइसे चलाने की कोशिश करें यह हैश निष्कर्षण करता है, देखें कि क्या यह मदद करता है?
नोआम रतौस

यह उपयोगी है। धन्यवाद। लेकिन 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 कनेक्शन बनाने की कोशिश करता हूं, तो STunnel लॉग में मुझे त्रुटि दिखाई देती है
lsv

इसका मतलब है कि कुछ और पूरी तरह से, इसका मतलब है कि दोनों पक्ष caअपने सीए प्रमाण पत्र के लिए समान का उपयोग नहीं कर रहे हैं
नोम रत्हौस

1
धन्यवाद, openssl x509 -text -inform DER -in server_cert.pem मेरे p7bएन्कोडेड (?) प्रमाणपत्र को प्रयोग करने योग्य कुछ में बदल दिया ।
कोएन।

3
मेरी समस्या CRLF लाइन अंत के रूप में यहाँ वर्णित नहीं थी, लेकिन यह सुझाव मुझे ट्रैक पर लाने के लिए पर्याप्त था। मेरी समस्या यह थी कि मेरी फाइल को एक बोम के साथ डबल-बाइट यूनिकोड बचा लिया गया था, और विंडोज़ के लिए ओपनसेल उससे निपट नहीं सकता था। मैं ascii के रूप में resaved और यह काम किया।
एलरॉय फ्लिन

35

इसका एक अन्य संभावित कारण x509 मॉड्यूल का उपयोग करने की कोशिश कर रहा है जो x509 नहीं है

सर्वर प्रमाणपत्र x509 प्रारूप है, लेकिन निजी कुंजी rsa है

इसलिए,

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

14

मेरी स्थिति थोड़ी अलग थी। इसका समाधान यह था कि 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-----

M थोड़े noob, pls मुझे सुझाव दें .. कैसे मैक में इस फ़ाइल को संपादित करने के लिए
shubhamkes

मेरी भी ऐसी ही त्रुटि थी। आदेश को पलटते हुए मेरे लिए काम किया।
जॉन रिचर्डसन

मेरी चाबियाँ अलग-अलग फाइलों में आईं जिन्हें मुझे एक नई फ़ाइल बनाने की आवश्यकता थी:cat $SOURCE/privkey.pem $SOURCE/fullchain.pem > server.pem
ErichBSchulz

14

मेरी गलती केवल CERT फ़ाइल के बजाय CSR फ़ाइल का उपयोग कर रही थी।


2
कम से कम मैं अकेला ऐसा नहीं हूं जिसने यह गलती की है ... मुझे आश्चर्य है कि मॉड्यूल हमें इस बारे में सचेत नहीं करता है।
15

1
मुझे काम करने में घंटों लग गए। सभी xmlsec1 से एक गुप्त त्रुटि के साथ शुरू हो रहे हैं,key is not found
श्रेइबर

8

मेरे पास विंडोज का उपयोग करने का एक ही मुद्दा था, अगर नोटपैड ++ में इसे खोलकर और "यूसीएस -2 ले बॉम" से "यूटीएफ -8" में एन्कोडिंग को बदलकर मिला।


6

बीओएम के साथ नोटपैड ++ यूटीएफ -8 में एन्कोडिंग बदलें । इस तरह मेरे लिए काम किया


1
हाँ! इसने मेरे लिए काम किया। नोट Apple के किचेन उपयोगिता से निर्यात किए गए PEM प्रमाणपत्रों में BOM नहीं है और यह कुछ कार्यक्रमों को अपसेट करता है।
हुगहुगटोटल

5

यदि आप भोलेपन से ऐसा करने की कोशिश करते हैं तो आपको यह भ्रामक त्रुटि मिल सकती है :

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

निजी कुंजी का उपयोग करके डेटा को एन्क्रिप्ट करना डिज़ाइन द्वारा अनुमत नहीं है

आप ओपन एसएसएल के लिए कमांड लाइन विकल्पों से देख सकते हैं कि 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

नोट: मेरा विवरण स्पष्टता के लिए एक सरलीकरण है। अधिक जानकारी के लिए इस उत्तर को पढ़ें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.