ओपनएसएसएल के उपयोग से "यादृच्छिक राज्य 'लिखने में असमर्थ" का क्या अर्थ है?


407

मैं अपने सर्वर के व्यवस्थापक अनुभाग की सुरक्षा के लिए एक स्व-हस्ताक्षरित एसएसएल प्रमाणपत्र उत्पन्न कर रहा हूं, और मुझे यह संदेश ओपनएसएसएल से प्राप्त होता रहता है:

'यादृच्छिक राज्य' लिखने में असमर्थ

इसका क्या मतलब है?

यह एक उबंटू सर्वर पर है। मैंने हाल ही में सुरक्षा भेद्यता को ठीक करने के लिए libssl को अपग्रेड किया है

जवाबों:


555

व्यवहार में, ऐसा होने का सबसे आम कारण यह प्रतीत होता है कि आपके होम निर्देशिका में .rnd फ़ाइल आपके खाते के बजाय रूट के स्वामित्व में है। जल्दी ठीक:

sudo rm ~/.rnd

अधिक जानकारी के लिए, यहां ओपनएसएसएल से पूछे जाने वाले प्रश्न :

कभी-कभी ओप्सल कमांड लाइन उपयोगिता "PRNG सीडेड" त्रुटि संदेश के साथ गर्भपात नहीं करती है, लेकिन शिकायत करती है कि यह "यादृच्छिक राज्य" लिखने में असमर्थ है। यह संदेश डिफ़ॉल्ट सीडिंग फ़ाइल को संदर्भित करता है (पिछला उत्तर देखें)। एक संभावित कारण यह है कि कोई भी डिफ़ॉल्ट फ़ाइल नाम ज्ञात नहीं है क्योंकि न तो RANDFILE और न ही HOME सेट है। (इस मामले में वर्तमान निर्देशिका में 0.9.6 तक उपयोग की गई फ़ाइल ".rnd" संस्करण है, लेकिन यह 0.9.6a के साथ बदल गया है।)

इसलिए मैं फाइल सिस्टम में उन जगहों पर लिखने के लिए RANDFILE, HOME और अनुमतियों की जांच करूंगा।

यदि सब कुछ क्रम में लगता है, तो आप स्ट्रेस के साथ दौड़ने की कोशिश कर सकते हैं और देख सकते हैं कि वास्तव में क्या चल रहा है।


42
मेरा सिस्टम मुझे यह समस्या दे रहा था क्योंकि ".rnd" फ़ाइल मेरे उपयोगकर्ता के बजाय रूट के स्वामित्व में थी। एक त्वरित sudo chown user:user ~/.rndबनाया सब कुछ बाहर काम करते हैं।
हॉफब्रियन

1
मुझे ओपी जैसी ही समस्या थी। मैंने sudoबात की और यह काम कर गया। लेकिन .rndस्व-हस्ताक्षरित प्रमाण पत्र बनाने के बाद भी मुझे अपने $ HOME में रूट द्वारा iwned क्यों करना है ?
ल्यूक एम

3
हाँ, यदि आप php वेब सर्वर से चलाने के लिए, उपयोगकर्ता www-डेटा है, और आप हर openssl से पहले "निर्यात" जोड़ना चाहिए: shell_exec ( 'निर्यात RANDFILE = "rnd।"; Openssl ecparam -genkey -name secp256k1'))
diyism

2
यदि आप PHP जैसी स्क्रिप्टिंग भाषा का उपयोग www-data के रूप में /var/www/.rndOpensl को कॉल करने के लिए कर रहे हैं, तो आप इसे बनाकर और इसे चॉइस करके हल कर सकते हैं www-data। (यह मानते हुए कि /var/wwwयह www-dataहोम फोल्डर है, जो कि अधिकांश सिस्टमों पर है। आप www-dataहोम फोल्डर की जांच कर सकते हैं cat /etc/passwd | grep www-data)
Nick

1
मैं विंडोज का उपयोग कर रहा था - बेशक, मुझे प्रशासक के रूप में सीएमडी प्रॉम्प्ट चलाने की आवश्यकता थी! ऐसा करने से इस समस्या का दौर शुरू हो गया।
निकब्यूगी

264

मुझे पता है कि यह सवाल लिनक्स पर है, लेकिन विंडोज़ पर मेरे पास एक ही मुद्दा था। काम करने के लिए आपको "प्रॉम्प्ट ऐज एडमिनिस्ट्रेटर" मोड में कमांड प्रॉम्प्ट शुरू करना होगा। अन्यथा आपको वही मिलता है: 'यादृच्छिक स्थिति' त्रुटि लिखने में असमर्थ।


13
मैं प्रशासक के रूप में खिड़कियों पर चल रहा हूं, लेकिन अभी भी त्रुटि मिलती है
Smalcat

6
मशीन पर एक प्रशासक होना और "रन अस एडमिनिस्ट्रेटर" का उपयोग करना अलग हैं। "रन अस एडमिनिस्ट्रेटर" प्रोग्राम को एक प्रशासक के रूप में चलाने के लिए मजबूर करता है, अन्यथा जब आप एक प्रशासक होते हैं, तो प्रॉम्प्ट एक गैर-प्रशासक सुरक्षा मंजूरी के साथ चलेगा।
बीचहाउस

66
यदि आप व्यवस्थापक मोड में चल रहे हैं और आप अभी भी "यादृच्छिक राज्य लिखने में असमर्थ" प्राप्त कर रहे हैं , तो set RANDFILE=.rndनिष्पादन से पहले एक और समाधान है openssl
jevon

3
पॉवरशेल में यह इसके $env:RANDFILE=".rnd"बजाय है set RANDFILE=.rnd
x5657

ऐसा नहीं करने के नकारात्मक पक्ष क्या है?
स्टैनटैस्टिक

41

Windows प्लेटफ़ॉर्म पर एक अन्य समस्या, सुनिश्चित करें कि आप एक प्रशासनिक उपयोगकर्ता के रूप में अपना कमांड प्रॉम्प्ट चला रहे हैं!

मुझे नहीं पता कि इसने कितनी बार मुझे काटा है ...


जैसा कि अन्य ने इस सेट को निर्धारित करने का सुझाव दिया है RANDFILE =। and मेरे लिए बिना cmd लाइन किए प्रशासक के साथ काम किया है
स्वेतोस्लाव Marinov

16

जाहिर है, मुझे ओपनएसएसएल को रूट के रूप में चलाने की आवश्यकता थी ताकि इसके लिए सीडिंग फ़ाइल की अनुमति हो।


16
यह अधिक संभावना है कि आपने इसे एक बार रूट के रूप में चलाया था। आपके होम-डायरेक्टरी में .rnd फ़ाइल केवल रूट के लिए सेट की गई अनुमतियों के साथ बनाई गई थी। थोड़ी देर पहले मेरे साथ ऐसा हुआ था। .Rnd के विलोपन ने इस समस्या को हल कर दिया।
fotNelton

12

मैं विंडोज़ सर्वर पर एक ही बात थी। फिर मुझे पता चला कि यह vars.batकौन सा है:

set HOME=C:\Program Files (x86)\OpenVPN\easy-rsa

फिर शुरू से फिर से करें और सब कुछ ठीक होना चाहिए।


वह यह था! धन्यवाद। मैंने निर्देशों (यहाँ: openvpn.net/index.php/open-source/documentation/howto.html#pki ) से "इन-कॉन्फिग" और "वर्स" कमांड के बीच यह बदलाव किया । होना चाहिए क्योंकि मैंने 32-बिट संस्करण स्थापित किया (जो मुझे पसंद है)।
सहजीवन

4
यह चाल चली, और मुझे व्यवस्थापक के रूप में नहीं चलना पड़ा। धन्यवाद! वास्तव में, मैं बस इस्तेमाल कियाset HOME=.
Synetech

6

मेरे लिए समस्या यह थी कि मेरे घर की निर्देशिका में .rnd था, लेकिन यह रूट के स्वामित्व में था। इसे डिलीट करना और ओपनसेल कमांड को फिर से सेट करना।


5

आपको $ RANDFILE पर्यावरण चर सेट करना चाहिए और / या $ HOME / .rnd फ़ाइल बनानी चाहिए। ( ओपनएसएसएल एफएक्यू )। (बेशक, आपके पास उस फ़ाइल के अधिकार होने चाहिए। अन्य उत्तर यहां दिए गए हैं। लेकिन पहले आपके पास फ़ाइल और उसके लिए एक संदर्भ होना चाहिए।)

संस्करण के लिए 0.9.6 ओपनएसएसएल ने वर्तमान निर्देशिका में सीडिंग फ़ाइल ".rnd" में लिखा। संस्करण 0.9.6a में आपके पास कोई डिफ़ॉल्ट सीडिंग फ़ाइल नहीं है। OpenSSL 0.9.6b और बाद में 0.9.6a के समान व्यवहार करेगा, लेकिन अगर पर्यावरण चर सेट नहीं किया गया है, तो विंडोज सिस्टम पर होम के लिए "C: \" के डिफ़ॉल्ट का उपयोग करेगा।

यदि डिफॉल्ट सीडिंग फ़ाइल मौजूद नहीं है या बहुत कम है, तो "PRNG सीडेड" त्रुटि संदेश नहीं हो सकता है।

$ RANDFILE पर्यावरण चर और $ HOME / .rnd केवल OpenSSL कमांड लाइन टूल द्वारा उपयोग किए जाते हैं। ओपनएसएसएल लाइब्रेरी का उपयोग करने वाले एप्लिकेशन एन्ट्रापी स्रोत को निर्दिष्ट करने के लिए अपने स्वयं के कॉन्फ़िगरेशन विकल्प प्रदान करते हैं, कृपया आवेदन के साथ आने वाले दस्तावेज की जांच करें।


1

मैं आज AWS लाम्बा पर इस समस्या को लेकर आया हूं। मैंने एक पर्यावरण चर RANDFILE = /tmp/.random बनाया

यही चाल चली।

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