أرغب في أتمتة العملية التالية باستخدام الأمر openssl:

  • افتح المتصفح ، واذهب إلى https://www.google.com
  • افحص SSL cert
  • قم بتصديره محليًا بتنسيق DER

لقد كنت أعمل على غرار الأمر التالي (ملفوف هنا في بيثون):

local ("echo -n | openssl s_client -connect google.com:443 -certform DER | sed -ne '/ -BEGIN CERTIFICATE - /، / - END CERTIFICATE- / p'> /tmp/google.com.der")

لكنها لا تعطيني ما أتوقعه.

answer

يقوم sedالأمر الخاص بك بالتقاط openssl s_clientالإخراج القياسي فقط ، ولكن الشهادة تأتي مع معلومات تصحيح الأخطاء الأخرى المتعلقة بالخطأ القياسي. هل حاولت شيء من هذا القبيل؟

openssl s_client -connect google.com:443 </dev/null 2>&1 |
  sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' |
  openssl x509 -outform DER >/tmp/google.com.der

من المحتمل أنك ترى الخطوط التي تظهر opensslعلى stderr ويتم تجاهلها sed. يمكنك التخلص منها قبل تمرير الإخراج إلى sed:

% echo | openssl s_client -connect google.com:443 -certform DER 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
-----BEGIN CERTIFICATE-----
MIIF/DCCBWWgAwIBAgIKUCYyawAAAAB1rzANBgkqhkiG9w0BAQUFADBGMQswCQYD
...
v6UdT7iXlxVh2oslpIksSw2bf0H7PUQQjFCMLVbiEMAQbXal4+SsyYB+GsPVvlR+
-----END CERTIFICATE-----