कमांड लाइन से पासफ़्रेज़ का उपयोग करके ओपनएसएसएल कुंजी कैसे उत्पन्न करें?


107

पहला - अगर मैं पासफ़्रेज़ नहीं देता तो क्या होगा? क्या छद्म यादृच्छिक वाक्यांश के कुछ प्रकार का उपयोग किया जाता है? मैं बस कुछ "अच्छा पर्याप्त" के लिए देख रहा हूँ बे पर आकस्मिक हैकर्स रखने के लिए।

दूसरा - मैं कमांड लाइन पर पासफ़्रेज़ की आपूर्ति करते हुए कमांड लाइन बनाने वाली कुंजी जोड़ी कैसे बना सकता हूँ?


मैं अंत में इसे इन कमांड का उपयोग करके काम कर रहा हूं, निष्पादन का उपयोग करके () जिसे आमतौर पर उपयोग करने के लिए सुरक्षित नहीं माना जाता है, किसी फाइल में PassPhrase देने के लिए बेहतर है। मैं इस जोखिम को स्वीकार कर सकता हूं क्योंकि मुझे यकीन है कि PHP केवल मेरे पीसी पर निष्पादित की जाएगी (जो विंडोज़ चलाता है और जिसमें PS कमांड नहीं है)।

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

@Caf को बहुत-बहुत धन्यवाद, जिनके बिना यह संभव नहीं होता।

केवल एक अफसोस - कि, चाहे मैं कितना भी Google, कोई भी openssl_pkey_new()Windows पर Xampp के साथ काम करने के लिए प्रतीत नहीं हो सकता है (जो कि एक महत्वपूर्ण जोड़ी उत्पन्न करने का उचित तरीका है)


4
क्यों openssl_pkey_new()... एक महत्वपूर्ण जोड़ी उत्पन्न करने के लिए "उचित" तरीका है?
जेक बर्गर

विंडोज (सामान्य रूप से) नहीं है, psलेकिन विस्टा के बाद से यह हैwmic process get commandline
dave_thompson_085

जवाबों:


210

यदि आप पासफ़्रेज़ का उपयोग नहीं करते हैं, तो निजी कुंजी को किसी भी सममित सिफर से एन्क्रिप्ट नहीं किया जाता है - यह आउटपुट पूरी तरह से असुरक्षित है।

आप एक कीपर को उत्पन्न कर सकते हैं, कमांड लाइन पर पासवर्ड की आपूर्ति एक मंगलाचरण का उपयोग कर की तरह (इस मामले में, पासवर्ड है foobar):

openssl genrsa -aes128 -passout pass:foobar 3072

हालाँकि, ध्यान दें कि इस पासफ़्रेज़ को उस समय मशीन पर चलने वाली किसी अन्य प्रक्रिया द्वारा पकड़ा जा सकता है, क्योंकि कमांड-लाइन तर्क आमतौर पर सभी प्रक्रियाओं के लिए दिखाई देते हैं।

एक बेहतर विकल्प पासफ़्रेज़ को एक अस्थायी फ़ाइल में लिखना है जो फ़ाइल अनुमतियों के साथ सुरक्षित है, और यह निर्दिष्ट करें:

openssl genrsa -aes128 -passout file:passphrase.txt 3072

या मानक इनपुट पर पासफ़्रेज़ की आपूर्ति करें:

openssl genrsa -aes128 -passout stdin 3072

आप file:विकल्प के साथ एक नामित पाइप , या एक फ़ाइल विवरणक का भी उपयोग कर सकते हैं ।


तब मिलान सार्वजनिक कुंजी प्राप्त करने के लिए, आपको निजी पैरामीटर को एन्क्रिप्ट करने के लिए उपयोग किए जाने वाले पैरामीटर के openssl rsaसाथ समान पासफ़्रेज़ की आपूर्ति करने की आवश्यकता होती है -passin:

openssl rsa -passin file:passphrase.txt -pubout

(यह मानक इनपुट पर एन्क्रिप्टेड निजी कुंजी की अपेक्षा करता है - आप इसके बजाय इसका उपयोग करके किसी फ़ाइल से पढ़ सकते हैं -in <file>)।


फ़ाइलों में 3072-बिट निजी और सार्वजनिक कुंजी जोड़ी बनाने का उदाहरण, पासवर्ड के साथ एन्क्रिप्टेड निजी कुंजी जोड़ी के साथ foobar:

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 3072
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

+1 महान, वह काम करता है! धन्यवाद, अगर आप सिर्फ एक छोटे से अधिक की मदद कर सकते हैं तो आपको जवाब मिल जाएगा ... यह काम क्यों नहीं होगा? खुलता है rsa -in privkey.pem -pubout -passout पास: foobar -out pubkey.pem
Mawg का कहना है कि मोनिका

या, इसे दूसरे तरीके से रखने के लिए - कैसे आपके कमांड से सार्वजनिक कुंजी (जो मेरा से थोड़ा अलग है)। मुझे बस एक मैच्योर जोड़ी चाहिए। यह केवल "बस काफी अच्छी" सुरक्षा है।
मावग का कहना है कि मोनिका

4
@Mawg: आपका opensslआदेश सार्वजनिक कुंजी को दिए गए निजी कुंजी के अनुरूप आउटपुट कर रहा है - सार्वजनिक कुंजी एन्क्रिप्टेड नहीं हैं (वे गुप्त नहीं हैं), इसलिए इसका उपयोग करने का -passoutकोई मतलब नहीं है। आप शायद -passinपहले चरण में निजी कुंजी को एन्क्रिप्ट करने के लिए उपयोग किए जाने वाले पासफ़्रेज़ की आपूर्ति करने के लिए, वहां उपयोग करना चाहते हैं । मैंने उत्तर में कुछ जोड़ा है।
कैफे

@ कैफ, महान प्रतिक्रिया के लिए धन्यवाद (+1 फिर)। हालांकि, मैं स्पष्ट रूप से बहुत ज्यादा गूंगा हूं जिसे ओपनएसएसएल का उपयोग करने की अनुमति दी गई है। मैं एक फ़ाइल में कुंजी चाहता हूँ और, किसी कारण से, openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pemऐसा नहीं करता है। क्या आप कृपया मुझे दो कमांड दे सकते हैं - एक एक फाइल को दूसरी में सार्वजनिक कुंजी उत्पन्न करने के लिए एक दूसरे में निजी कुंजी उत्पन्न करने के लिए (एक फ़ाइल में भी)? इस तरह के एक उपद्रव होने के लिए क्षमा करें, लेकिन मैं इसके साथ खेल रहा हूं और बस यह काम नहीं कर सकता :-(
Mawg कहते हैं, मोनिका

3
@Mawg: ओपनएसएसएल को यह पसंद नहीं है अगर -outपरम के बाद आता है 2048- वास्तव में, यह कमांड लाइन पर आखिरी चीज माना जाता है (मैंने अपना उत्तर इस तरह अपडेट किया है)। अंतिम उदाहरण देखें, मुझे लगता है कि आप यही चाहते हैं। एईएस -128 के रूप में, जिस पर मैं इन मामलों में भरोसा करता हूं , वह एईएस -256 से अधिक की सिफारिश करता है।
कैफे

9

genrsaकर दिया गया है के द्वारा बदल दियाgenpkey और जब एक टर्मिनल यह पासवर्ड के लिए संकेत देगा में मैन्युअल रूप से चलाएँ:

openssl genpkey -aes-256-cbc -algorithm RSA -out /etc/ssl/private/key.pem -pkeyopt rsa_keygen_bits:4096

हालाँकि जब किसी स्क्रिप्ट से कमांड चलती है तो पासवर्ड के लिए देखने के लिए कमांड पासवर्ड नहीं पूछेगा क्योंकि shellस्क्रिप्ट में फ़ंक्शन का उपयोग करने की प्रक्रिया के रूप में देखा जा सकता है :

get_passwd() {
    local passwd=
    echo -ne "Enter passwd for private key: ? "; read -s passwd
    openssl genpkey -aes-256-cbc -pass pass:$passwd -algorithm RSA -out $PRIV_KEY -pkeyopt rsa_keygen_bits:$PRIV_KEYSIZE
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.