我想使用openssl命令自动执行以下过程:
我一直在沿着下面的命令行(这里用python包装):
local(“echo -n | openssl s_client -connect google.com:443 -certform DER | sed -ne'/ -BEGIN CERTIFICATE – /,/ – END CERTIFICATE- / p'> /tmp/google.com.der”)
但它不能给我我所期望的。
你的sed命令只捕获openssl s_client的标准输出,但是证书附带了标准错误的其他debugging信息。 你有没有尝试过这样的事情?
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
您可能会看到stderr上openssl输出的行,并被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-----