سؤال تجنب مطالبة كلمة المرور للمفاتيح والمطالبات بمعلومات DN


أستخدم التعليمة البرمجية التالية لإنشاء مفاتيح:

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. كيف يمكنني تجنب المطالبة باسم البلد ، المنظمة إلخ. آمل أن أتمكن من تقديمها في موجه الأوامر (تعرض الصفحة للصفحة خيارات المستوى الأعلى فقط لـ OpenSSL)


85
2017-12-27 17:39


الأصل




الأجوبة:


تصحيح: هذا هو أكثر إجابتي شعبية حتى الآن ، ولقد مرت بضع سنوات حتى الآن أضفت متغير ECDSA. إذا كنت تستطيع استخدام ECDSA يجب عليك.


يمكنك توفير كل هذه المعلومات على سطر الأوامر.

إنشاء شهادة واحدة موقعة ذاتيًا بدون كلمة مرور واحدة:

إصدار 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

جميع الأوامر الفرعية openssl لها صفحة رجل الخاصة بهم. نرى 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
oberstet: نعم ، هذا صحيح. - bahamat
هل من الممكن تمرير الموضوع مفتاح نفسها من stdin؟ لقد جربت "قرد stdin" ، "-dkey fd: 1" و "-key -" .. بدون حظ. - oberstet
JeremyBaker: لا ، ستحتاج إلى عملية من خطوتين لذلك. احذف -x509 و -days لإنشاء CSR بدلاً من شهادة ، استخدم طريقة توقيع CA المعتادة. - bahamat
jww - وقد حان الوقت. بدءًا من Chrome v58 ، عند محاولة تحميل صفحة آمنة ولكن لا تحتوي الشهادة على subjectAltName متطابق ، فإنها تعرض صفحة خطأ الخصوصية مع رسالة الخطأ "NET :: 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


الإجابة المقبولة تحتاج إلى بضع تصحيحات صغيرة. خطوط 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
    

3
2018-06-08 19:28



كيف يختلف هذا عن الإجابة المقبولة؟ - Ramhound
والفرق المهم الوحيد هو أنني أدرج بشكل صريح خطوة توليد ملف pem. يفتقد الإجابة المقبولة الأحرف اثنين ثم جعلني أعتقد أن الأمر غير صحيح. - Andrei Sura
قد ترغب في ذكر هذه الحقيقة. إذا كانت الإجابة المقبولة غير مكتملة بالفعل ، وهي عبارة عن أحرف مفقودة ، فمن المهم إبراز الاختلافات وكيف تحتوي إجابتك على معلومات مهمة هامة. - Ramhound


bahamat لديه إجابة رائعة. للأسف بعض إصدارات openssl ترمي خطأ عند محاولة إنشاء شهادة ECDSA بأمر واحد. يظهر الخطأ على النحو التالي:

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

كنت أستخدم openssl 1.0.1e-fips على CentOS 7.

يبدو أن إنشاء شهادتك باستخدام الأوامر الثلاثة التالية:

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