سؤال كيفية تنزيل شهادة ssl من موقع على شبكة الانترنت؟


أريد تنزيل شهادة ssl من ، على سبيل المثال https://www.google.comباستخدام wget أو أي أوامر أخرى. أي خط قيادة يونيكس؟ wget أو openssl؟


162
2018-05-07 21:01


الأصل




الأجوبة:


لتنزيل الشهادة ، تحتاج إلى استخدام العميل المدمج في openssl مثل:

echo -n | openssl s_client -connect HOST:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

هذا سيحفظ الشهادة ل /tmp/$SERVERNAME.cert.

يمكنك استخدام -showcerts إذا كنت تريد تنزيل جميع الشهادات في السلسلة. ولكن إذا كنت تريد فقط تنزيل شهادة الخادم ، فلا داعي لتحديدها -showcerts

echo -n يعطي استجابة للخادم ، بحيث يتم تحرير الاتصال

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' يزيل معلومات حول سلسلة الشهادة وتفاصيل الاتصال. هذا هو التنسيق المفضل لاستيراد الشهادة إلى ملفات المفاتيح الأخرى.


219
2017-10-19 22:59



نقدر أنك لم تقدم إجابة جيدة فحسب ، بل شرحًا دقيقًا أيضًا. - marco.m
هل -showcerts تظهر الخادم / ورقة أوراق أيضا؟ اعتقدت أنها عرضت وسيطة فقط عندما تم تضمين هذا التبديل. - Mike B
كما قال الجواب ، s_client يعرض دائمًا شهادة الخادم (إذا كان هناك واحد ، أي أن الخادم يستجيب إلى مرحبًا ولا يختار مجموعة مجهولة). -showcerts عروض الكل تلقيت السيرف ، الخادم أولا ثم الوسطيات و / أو الجذر. - dave_thompson_085
هذا لا يعمل في وجود وكيل ، على الرغم من. - Frederick Nord
هذا أيضًا لا يعمل مع الخوادم التي تستخدم SNI (شهادات / مجالات متعددة على عنوان IP واحد). لتجنب المشاكل ، حدد معلمة servername في openssl: openssl s_client -connect HOST: PORTNUMBER -servername CN - verhage


لقد وجدت الجواب. يوفر Openssl ذلك.

openssl s_client -connect $ {REMHOST}: $ {REMPORT}


54
2018-05-07 21:05



أيضا openssl x509 -text <<EOF cert-text EOF لمعرفة تفاصيل الشهادة - mpapis
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem من باب المجاملة serverfault.com/questions/139728/... - pulkitsinghal
هذه ينجز نفسه ويتخطى sed الإختراق. - phs
يقوم هذا بالتحقق من شهادة واحدة فقط ، ماذا لو كانت الخدمة جزءًا من مجموعة خوادم متوازنة التحميل ، لكل منها شهادة مختلفة ، ربما تكون موقعة من قبل مرجع جذر مختلف؟ أو بعبارة أخرى ، قد يسمح هجوم mitm بهذا الطلب بالانتقال إلى الموقع الحقيقي ، ثم توجيه الطلبات الأخرى إلى خوادمه. هل هناك أي طرق للتحقق من ذلك؟ وللحصول على قائمة بكل الشهادات التي يمتلكها النطاق حقًا؟ - Jens Timmerman
JensTimmerman "أو بعبارة أخرى ، قد يسمح هجوم mitm بهذا الطلب بالانتقال إلى الموقع الحقيقي ، ثم توجيه الطلبات الأخرى إلى خوادمه." هذا غير ممكن إلا إذا كان لدى الرجل في الوسط شهادة صالحة للخادم الهدف (أو العميل هو سخيفة لا يتحقق من شهادة الخادم). من الواضح ، إذا كان الخادم يقدم في بعض الأحيان شهادة مختلفة ، فيمكنك فقط الأمل في الحصول عليها في النهاية من خلال تكرار محاولات الاتصال. - David Tonhofer


ال GNUTLS أداة العميل ، gnutls-cli، يمكن أيضا أن تجعل من السهل:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

تم تصميم البرنامج لتوفير عميل تفاعلي للموقع ، لذلك تحتاج إلى إعطائها إدخال فارغ (في هذا المثال ، من /dev/null) لإنهاء الجلسة التفاعلية.


20
2017-10-07 06:19



كيف يمكن أن تجعل gnutls من خلال الاتصال (النظام على نطاق واسع) HTTPS وكيل وطباعة الشهادة التي يخالجها؟ - Frederick Nord


استنادًا إلىbignose answer ، إليك إصدار قائم بذاته يناسب جيدًا على سبيل المثال ، وصفة طاه:

sudo apt-get install gnutls-bin 
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates

8
2018-05-27 09:31





true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

هذا الأسلوب من openssl تتوقع stdin ، لذلك نحن نقدمه عبر true |، هذا يتصل بالخادم المحدد في المعلمة -connect. 2>/dev/null أخطاء السكوت (اختياري) ، يمكننا تمرير الإخراج بأكمله إلى محلل x509 ، تحديد /dev/stdin استخدام أنبوب shell كملف الإدخال. وهذا سوف يخرج فقط -----BEGIN CERTIFICATE----- إلى -----END CERTIFICATE----- جزء من s_client انتاج. يمكنك إعادة توجيه ذلك إلى ملف عن طريق إضافة > google.com.pem إلى نهاية الأمر.


بقدر ما أستطيع أن أقول ، هذا لا يتحقق من سلسلة الشهادة ، يمكنه فقط إخبارك ما هي هوية ssl التي يوفرها الخادم النهائي.


6
2018-01-12 10:38



(1) هذا لا يحسن الأجوبة منذ 6 سنوات (2) x509 يقرأ stdin افتراضيا ذلك -in /dev/stdin غير زائدة (3) s_client يقوم بالتحقق من سيرفر الخادم بشكل صحيح إلى نقطة إرساء الثقة المحلية (الجذر) وهو غير منتهي الصلاحية ، لكنك قمت بكبت المعلومات التي ستظهر هذا (4) أنه لا يتحقق من الإبطال (5) فإنه يتحقق من اسم في شهادة الخادم فقط في 1.0.2 ثم ​​لا افتراضيا (ولكن يمكنك بسهولة التحقق من نفسك من خلال النظر في شهادة بعد ذلك) - dave_thompson_085
@ dave_thompson_085 ، السؤال هو كيفية تنزيل الشهادة ، ولكن لا تظهر معلومات السلسلة. أنا أحب openssl x509 أفضل بكثير من س س في إجابة أخرى. - Der_Meister


صيغة بديلة باستخدام Ex و عملية الاستبدال:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt

0