सवाल चाबियों के लिए पासवर्ड प्रॉम्प्ट से बचें और डीएन सूचना के लिए संकेत दें


मैं कुंजी उत्पन्न करने के लिए निम्नलिखित कोड का उपयोग कर रहा हूँ:

apt-get -qq -y install openssl;
mkdir -p /etc/apache2/ssl;
openssl genrsa -des3 -out server.key 1024;
openssl req -new -key server.key -out server.csr;
cp server.key server.key.org;
openssl rsa -in server.key.org -out server.key;
openssl x509 -req -days 12000 -in server.csr -signkey server.key -out server.crt;
mv server.crt  /etc/apache2/ssl/cert.pem;
mv server.key  /etc/apache2/ssl/cert.key;
rm -f server.key.orig;
rm -f server.csr

मेरे पास दो प्रश्न हैं:

  1. मैं पासफ्रेज संकेत कैसे छोड़ सकता हूं? क्या ऐसा करने के लिए मेरे लिए उचित रूप से सुरक्षित होगा? (जैसा कि इसमें किसी भी तरह का मूर्ख नहीं होना चाहिए जैसे किसी को प्रमाण पत्र हैक करने में सक्षम होना चाहिए)

  2. मैं देश के नाम, संगठन आदि के लिए संकेत से कैसे बचूं। मुझे उम्मीद है कि मैं उन्हें कमांड प्रॉम्प्ट पर दे सकता हूं (मैन पेज ओपनएसएसएल के लिए केवल शीर्ष स्तर के विकल्प दिखाता है)


85
2017-12-27 17:39


मूल




जवाब:


संपादित करें: यह अब तक का सबसे लोकप्रिय उत्तर है, और अब कुछ सालों रहे हैं इसलिए मैंने एक ईसीडीएसए संस्करण जोड़ा है। यदि आप ईसीडीएसए का उपयोग कर सकते हैं तो आपको चाहिए।


आप कमांड लाइन पर उस सारी जानकारी की आपूर्ति कर सकते हैं।

एक कदम स्वयं हस्ताक्षरित पासवर्ड-कम प्रमाणपत्र पीढ़ी:

आरएसए संस्करण

openssl req \
    -new \
    -newkey rsa:4096 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

ईसीडीएसए संस्करण

openssl req \
    -new \
    -newkey ec \
    -pkeyopt ec_paramgen_curve:prime256v1 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

सभी openssl subcommands के अपने स्वयं के मैन पेज है। देख man req


विशेष रूप से अपने प्रश्नों को संबोधित करना और वास्तव में कौन से विकल्प प्रभावी हैं इसके बारे में अधिक स्पष्ट होना:

  1. -nodes कुंजी एन्क्रिप्ट नहीं करने के लिए ध्वज सिग्नल, इस प्रकार आपको पासवर्ड की आवश्यकता नहीं है। आप भी इसका उपयोग कर सकते हैं -passout arg झंडा। देख PASS PHRASE ARGUMENTS में openssl(1) तर्क को प्रारूपित करने के लिए मैन पेज।

  2. का उपयोग करते हुए -subj ध्वज आप विषय निर्दिष्ट कर सकते हैं (उदाहरण ऊपर है)।


139
2017-12-27 19:44



"-Subj" के माध्यम से सामान पढ़ना बहुत अच्छा काम करता है, हालांकि - मेरे लिए - केवल जब OPENSSL_CONF सेट नहीं होता है। IOW: यदि OPENSSL_CONF सेट है, तो OpenSSL वहां से पढ़ने का प्रयास करेगा, और नज़रअंदाज़ करना "-subj" कमांड लाइन तर्क। मुझे पता लगाने के लिए थोड़ी देर लग गई। - oberstet
ओबरस्टेट: हाँ, यह सच है। - bahamat
क्या इस विषय को पार करना संभव है कुंजी खुद stdin से? मैंने "-की स्टडीन", "-की एफडी: 1" और "-की -" .. कोई किस्मत के साथ कोशिश की है। - oberstet
@ जेरेमीबेकर: नहीं, इसके लिए आपको दो चरणों की आवश्यकता होगी। छोड़ो -x509 तथा -days प्रमाण पत्र के बजाय सीएसआर उत्पन्न करने के लिए अपने सामान्य सीए हस्ताक्षर विधि का उपयोग करें। - bahamat
@jww - और वह समय आ गया है। एक सुरक्षित पृष्ठ लोड करने का प्रयास करते समय क्रोम v58 से शुरू हो रहा है लेकिन प्रमाणपत्र में कोई मिलान विषय नहीं है, यह त्रुटि संदेश "नेट :: ERR_CERT_COMMON_NAME_INVALID" के साथ एक गोपनीयता त्रुटि पृष्ठ दिखाता है। उन्नत बटन पर क्लिक करने से संदेश दिखाता है "... इसका सुरक्षा प्रमाणपत्र [missing_subjectAltName] से है" - Insomniac Software


नहीं करता है -passin विकल्प आपके लिए चाल है?

साथ में file:pathname फॉर्म आप उस फ़ाइल के लिए अनुमति 600 के साथ काफी सुरक्षित हो सकते हैं।


8
2017-12-27 19:54



मैन पेज में विकल्प देखा। ऐसा लगता है कि मुझे बिना किसी संकेत के पास पासफ्रेज हो सकता है। धन्यवाद!
और साथ -passin 'pass:YOUR_PASSWORD'? - डॉक्टर: openssl.org/docs/man1.0.2/apps/... - andras.tim


स्वीकृत उत्तर में कुछ छोटे सुधार की आवश्यकता है। ईसी लाइन्स:

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

होना चाहिए:

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

मैकोज़ पर - ओपनएसएसएल 1.0.2 एफ ब्रू के माध्यम से स्थापित मैंने नीचे वर्णित स्वीकृत उत्तर की पुष्टि की

  • उपलब्ध अंडाकार घटता सूची:

    $ openssl ecparam -list_curves
    
  • एक कुंजी फ़ाइल उत्पन्न करने के लिए:

    $ openssl ecparam -name secp256k1 -out secp256k1.pem
    
  • पासवर्ड प्रॉम्प्ट के बिना प्रमाण उत्पन्न करने के लिए:

    openssl req \
        -new \
        -newkey ec:secp256k1.pem \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=US/ST=FL/L=Ocala/O=Home/CN=example.com" \
        -keyout server.key \
        -out server.crt
    
  • प्रमाण देखने के लिए:

    $ openssl x509 -noout -text -in server.crt
    

3
2018-06-08 19:28



स्वीकृत उत्तर से यह अलग कैसे है? - Ramhound
एकमात्र महत्वपूर्ण अंतर यह है कि मैं स्पष्ट रूप से पेम फ़ाइल उत्पन्न करने के चरण को सूचीबद्ध करता हूं। स्वीकृत उत्तर में दो \ अक्षर गुम हैं और यह मुझे लगता है कि आदेश गलत है। - Andrei Sura
आप उस तथ्य का जिक्र करना चाह सकते हैं। यदि स्वीकृत उत्तर वास्तव में अपूर्ण है, और इसमें वर्ण गुम हैं, मतभेदों को उजागर करने के लिए महत्वपूर्ण है और आपके उत्तर में महत्वपूर्ण महत्वपूर्ण जानकारी कैसे है। - Ramhound


@ बाहमत का एक अच्छा जवाब है। दुर्भाग्य से openssl के कुछ संस्करण एक आदेश के साथ एक ECDSA प्रमाणपत्र बनाने की कोशिश करते समय एक त्रुटि फेंक देते हैं। त्रुटि कुछ इस प्रकार है:

routines:EVP_PKEY_CTX_ctrl:invalid operation:pmeth_lib.c:404

मैं उपयोग कर रहा था openssl 1.0.1e-fips पर CentOS 7

निम्नलिखित 3 आदेशों के साथ अपना प्रमाणपत्र बनाना काम करता है:

openssl ecparam -genkey -name prime256v1 -out key.pem
openssl req -new -key key.pem -out csr.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
openssl req -x509 -days 365 -key key.pem -in csr.pem -out certificate.pem

1
2018-02-20 08:06



आखिरी पंक्ति के साथ अंत नहीं होना चाहिए server.crt? - ᴠɪɴᴄᴇɴᴛ


निम्न आदेश आज़माएं:

openssl genrsa -des3 -out user.key -passout pass:foo 1024

छोड़ने का हिस्सा है: -passout pass:foo


0
2018-01-16 17:16