不久前,谷歌浏览器宣布了不信任赛门铁克证书的计划。我试图弄清楚这是如何为 POC 完成的。
当我在 Google Chrome 上访问chas.com 时,我在开发控制台中收到以下消息:
用于从https://www.chase.com加载资源的 SSL 证书 将在 M70 中不受信任。一旦不信任,用户将无法加载这些资源。有关更多信息,请参阅https://g.co/chrome/symantecpkicerts 。
从 Chromium 源中,我可以看到他们有一个哈希列表,他们需要检查这些哈希值 - symantec_certs.cc,在这个README.md中,他们使用以下 openssl 命令从证书中获取哈希值。
for f in roots/*.pem;
do openssl x509 -noout -pubkey -in "${f}" | openssl asn1parse -inform pem -out /tmp/pubkey.out -noout;
digest=`cat /tmp/pubkey.out | openssl dgst -sha256 -c | awk -F " " '{print $2}' | sed s/:/,0x/g `;
echo "0x${digest} ${f##*/}";
done | sort
现在chase.com
,我使用以下命令获得了证书
openssl s_client -host chase.com -port 443 -prexit -showcerts
这会输出两个证书,我将它们复制到单独的文件中(从“开始证书”到“结束证书”)cert1.cert
和cert2.cert
要获取哈希值,请执行以下操作
for f in ./*.cert;
do cat "${f}" | openssl x509 -noout -pubkey | openssl asn1parse -inform pem -out /tmp/pubkey.out -noout;
digest=`cat /tmp/pubkey.out | openssl dgst -sha256 -c | awk -F " " '{print $2}' | sed s/:/,0x/g `;
echo "0x${digest}";
done
这使
0x14,0x72,0x0b,0x47,0x2b,0x12,0x3d,0xc2,0xfd,0xcc,0x13,0x2a,0x81,0x09,0xc7,0x29,0x97,0x13,0x36,0xaf,0x95,0x38,0x9f,0x89,0x12,0xa4,0x71,0xa8,0x78,0xdd,0xb7,0x37
0x80,0xcc,0x56,0x3a,0xb5,0xf8,0x3c,0xc4,0x1e,0xb0,0xaf,0x6a,0x14,0xd6,0xd8,0x07,0x18,0xc1,0x7e,0x35,0x2f,0x96,0x49,0xff,0xbc,0xdd,0x67,0xf8,0xbf,0x65,0x13,0x91
两者都不在 symantec_certs.cc
我相信证书链不包含根 CA 证书,我是否也应该计算根的公钥哈希并将其与已知的不信任根进行检查?如果是,如何获得根证书?