如何验证 Microsoft 证书

How to verify a Microsoft certificate

这是证书https://gist.github.com/larytet/2fb447e875831577584592cd99980fd1 (x5t VjWIUjS5JS3eAFdm2dnydlZfY-I)

我在做

openssl verify -verbose -x509_strict certificate.pen

我收到了

CN = estsclient.coreauth.outlook.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error certificate.pem: verification failed

在哪里可以找到应该安装在我的系统中的证书、整个链或根目录?

您需要提供 CA 证书,大多数真正的 CA 会在他们颁发的每个证书的扩展名中列出可以找到其证书的位置。

使用 OpenSSL,您可以查看此扩展程序:

openssl x509 -text -noout < certificate.pem

查找“授权信息访问扩展”及其“CA 颁发者”字段以查找 URL 并从 Microsoft.

下载证书

因为这个文件是用DER编码的,所以需要转码为PEM以便与openssl verify一起使用:

openssl x509 -inform der < Microsoft\ IT\ TLS\ CA\ 2.crt > Microsoft\ IT\ TLS\ CA\ 2.pem

因为您刚刚通过 HTTP 从不知道从哪里下载了这个文件,您需要一些方法来验证 的真实性。

您会注意到它也列出了颁发者,因此您可以递归地执行此过程以获得整个证书链,返回到您已经信任的根证书。通常,我们信任我们系统上 pre-installed 的证书。但是,理论上,攻击者可能已经破坏了该集合,因此人们有时确实会找到 out-of-band 方法来验证他们的根 CA 证书。什么适合您取决于您​​的应用程序。

您在前往信任锚的过程中下载的证书链是“中间”证书;您不必直接信任它们,因为您将验证从您系统上的锚点之一开始的链。

将 PEM-encoded 证书(包括页眉和页脚)串联在一个不受信任的证书文件中。在我的例子中,颁发“Microsoft IT TLS CA 2”中间证书的“Baltimore Cyber​​Trust Root”证书是 pre-installed 作为我系统上的根 CA,所以我只需要下载 Microsoft 证书,它是我的“不受信任”证书文件中只有一个。

现在您拥有尝试原始命令所需的信息:

openssl verify --verbose -untrusted Microsoft\ IT\ TLS\ CA\ 2.pem  -x509_strict certificate.pem

如果有人发现这个问题,我会得到类似这样的问题 + 大量评论

RUN curl --silent https://outlook.com/autodiscover/metadata/json/1 > ./outlook.com.autodiscover.metadata.json.1
RUN pem_file=certificate.pem \
    && echo "-----BEGIN CERTIFICATE-----" > $pem_file \
    && cat ./outlook.com.autodiscover.metadata.json.1 | jq --raw-output '.keys[0].keyvalue.value' >> $pem_file \
    && echo "-----END CERTIFICATE-----" >> $pem_file \
    && cat $pem_file \
    && openssl x509 -text -noout  < $pem_file | grep "CA Issuers" \
    && curl https://cacerts.digicert.com/BaltimoreCyberTrustRoot.crt.pem > rootCA.pem  \
    && curl http://www.microsoft.com/pki/mscorp/Microsoft%20IT%20TLS%20CA%202.crt | openssl x509 -inform der >> rootCA.pem \
    && curl https://cacerts.digicert.com/DigiCertCloudServicesCA-1.crt | openssl x509 -inform der >> rootCA.pem \
    && cat rootCA.pem \
    && cat certificate.pem

RUN pem_file=certificate.pem && openssl verify -verbose -x509_strict -untrusted rootCA.pem $pem_file