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

answer

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

echo -n | openssl s_client -connect $HOST:$PORTNUMBER -servername $SERVERNAME \
    | openssl x509 > /tmp/$SERVERNAME.cert

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

-اسم الخادم يستخدم لتحديد الشهادة الصحيحة عند تقديم عدة ، في حالة SNI.

يمكنك استخدامه -showcertsإذا كنت تريد تنزيل جميع الشهادات الموجودة في السلسلة. ولكن إذا كنت ترغب فقط في تنزيل شهادة الخادم ، فلا داعي للتحديد -showcerts. سوف يزيل "x509" في النهاية الشهادات الوسيطة ، ستحتاج إلى استخدام "sed -n '/ ----- BEGIN / ، / ----- END / p'" بدلاً من x509 في نهاية.

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

openssl x509'يزيل معلومات حول سلسلة الشهادات وتفاصيل الاتصال. هذا هو التنسيق المفضل لاستيراد الشهادة إلى ملفات تخزين المفاتيح الأخرى.

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

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

يمكن لأداة عميل GNUTLSgnutls-cli أن تجعل هذا الأمر سهلاً أيضًا:

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

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

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

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


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

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

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

بناء الجملة البديل باستخدام Ex وعملية الاستبدال:

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