कुंजी के लिए पासवर्ड प्रॉम्प्ट से बचें और डीएन जानकारी के लिए संकेत देता है


90

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

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

जवाबों:


150

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


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

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

RSA संस्करण

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

ECDSA संस्करण

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

सभी सबस्क्राइब सबमैंडल का अपना मैन पेज है। देखते हैं man req


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

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

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


3
"-सुबज" के माध्यम से सामान पढ़ना बहुत अच्छा काम करता है, हालांकि - मेरे लिए - केवल जब OPENSSL_CONF सेट नहीं है। IOW: यदि OPENSSL_CONF सेट है, तो OpenSSL वहां से पढ़ने की कोशिश करेगा, और "-subj" कमांड लाइन तर्क को अनदेखा करेगा। मुझे पता लगाने के लिए कुछ समय लगा।
ओबर्स्टेट

oberstet: हाँ, यह सच है।
बहमट

क्या स्टड से विषय कुंजी को पास करना संभव है ? मैंने "-की स्टड", "-की fd: 1" और "-की -" - .. को बिना किसी भाग्य के आज़माया है।
ओबर्स्टेट

1
@JeremyBaker: नहीं, आपको इसके लिए दो चरणों की प्रक्रिया की आवश्यकता होगी। प्रमाणपत्र के बजाय CSR जनरेट करने के लिए Omit- -x509and और -daysफिर अपने सामान्य CA हस्ताक्षर विधि का उपयोग करें।
बहमट

1
@jww - और वह समय आ गया है। Chrome v58 से शुरू करते हुए, जब एक सुरक्षित पृष्ठ लोड करने का प्रयास किया जाता है, लेकिन प्रमाणपत्र में मिलान विषय नहीं होता है, तो यह त्रुटि संदेश "NET :: ERR_CERT_COMMON_NAME_INVALID" के साथ एक गोपनीयता त्रुटि पृष्ठ दिखाता है। उन्नत बटन पर क्लिक करने से संदेश दिखाई देता है "... इसका सुरक्षा प्रमाणपत्र [लापता_सुबहअबेलनेम] से है"
इनसोम्निया सॉफ्टवेयर

11

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

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


मैन पेज में विकल्प देखा। ऐसा लगता है कि मैं बिना किसी संकेत के पासफ़्रेज़ को पास कर सकता हूं। धन्यवाद!

और के साथ -passin 'pass:YOUR_PASSWORD'? - doc: opensl.org/docs/man1.0.2/apps/…
andras.tim

5

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

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

होना चाहिए:

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

MacOS पर - OpenSSL 1.0.2f शराब की भठ्ठी के माध्यम से स्थापित मैंने नीचे वर्णित के रूप में स्वीकार किए गए उत्तर को सत्यापित किया

  • उपलब्ध अण्डाकार वक्रों को सूचीबद्ध करने के लिए:

    $ 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
    

यह स्वीकृत उत्तर से अलग कैसे है?
रामहुंड

1
एकमात्र महत्वपूर्ण अंतर यह है कि मैं स्पष्ट रूप से पेम फ़ाइल बनाने के चरण को सूचीबद्ध करता हूं। स्वीकृत उत्तर दो \ वर्णों को याद कर रहा है और इससे मुझे लगता है कि कमांड गलत है।
आंद्रेई सुरा

1
आप उस तथ्य का उल्लेख करना चाह सकते हैं। यदि स्वीकृत उत्तर वास्तव में अपूर्ण है, और गायब चरित्र है, तो मतभेदों को उजागर करने के लिए महत्वपूर्ण है और आपके उत्तर में महत्वपूर्ण महत्वपूर्ण जानकारी शामिल है।
रामहुंड

3

निम्नलिखित कमांड आज़माएं:

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

लंघन हिस्सा है: -passout pass:foo


2

@ नौबत का शानदार जवाब है। दुर्भाग्य से कुछ वर्जन के ओपनशेल एक कमांड के साथ 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

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