Com*_*are 20 android x509certificate android-7.0-nougat
N Developer Preview中有关其网络安全配置的文档提供了以下说明:
证书锁定是通过公钥的哈希提供一组证书(X.509证书的SubjectPublicKeyInfo)来完成的.只有当证书链包含至少一个固定公钥时,证书链才有效.
它们显示的XML已损坏(缺少结束标记),但除此之外表明散列是SHA256并编码为base64:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config>
<domain includeSubdomains="true">example.com</domain>
<pin-set expiration="2018-01-01">
<pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
<!-- backup pin -->
<pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
我们如何创建这样的哈希?
我试着在接近这个主旨,但openssl x509 -inform der -pubkey -noout不喜欢我的CRT文件.我无法轻易确定问题是否在CRT文件,说明,我的版本openssl或其他内容中.
有没有人有一个已知的良好配方来创建这个哈希?
Ale*_*bin 53
openssl x509 -in cert.crt -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
-inform der如果cert.crt是DER形式而不是PEM形式,则可能需要添加到第一个命令.
为了为已经存在的主机设置Android network-security-config固定,我更喜欢gnutls-cli(GnuTLS Client)。它以一种形式输出主机的证书信息,其中sha256可以以base64编码的形式易于复制粘贴。例如:
$ gnutls-cli stackoverflow.com </dev/null
<...>
- subject `CN=*.stackexchange.com,O=Stack Exchange\, Inc.,L=New York,ST=NY,C=US', issuer `CN=DigiCert SHA2 High Assurance Server CA,OU=www.digicert.com,O=DigiCert Inc,C=US', serial 0x0e11bbd70d54b710d0c6f540b6b52ca4, RSA key 2048 bits, signed using RSA-SHA256, activated `2016-05-21 00:00:00 UTC', expires `2019-08-14 12:00:00 UTC', pin-sha256="2zKehMv7KtnGBz1d2U0bFrAOKb1aWWlrG9a0BzrOvwA="
Run Code Online (Sandbox Code Playgroud)