这是证书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从不知从何处下载了此文件,所以您需要一些方法来验证其的真实性。
你会注意到它也列出了一个颁发者,所以你可以递归地执行这个过程,将整个证书链获取回你已经信任的根证书。通常,我们信任预先安装在系统上的证书。但是,理论上,攻击者可能已经破坏了该集,因此人们有时确实会找到带外方法来验证他们的根CA证书。什么适合你取决于你的申请。
你在去信任锚点的路上下载的证书链是";中间体";证书;您不必直接信任它们,因为您将从系统上的一个锚点开始验证链。
将PEM编码的证书(包括页眉和页脚(连接在一个不受信任的证书文件中。在我的情况下;Baltimore CyberTrust Root";颁发";Microsoft IT TLS CA 2";中间证书是作为根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