繁体   English   中英

将证书固定在Android上

[英]Certificate pinning on Android

我确实在Android上进行了证书固定(使用Retrofit),如OkHttp3 docs中所述 (输入错误的值->获得异常->放置期望值)。

但是,如果我决定旋转服务器证书,如何获取这些值以进行固定。

例如:我有证书“ X”,并且该证书将在两个月内与证书“ Y”一起轮换。 显然,我必须在Google Play上更新我的应用,并添加新的哈希值以固定新证书。 因此,如果目前只能从异常中获取这些哈希值,该怎么办。

固定时,您有几种选择,首先,您不必固定到叶证书,而可以固定到中间或根证书,如果您继续使用相同的受信任证书颁发机构,则应用将继续运行没有变化。

当然,没有什么能阻止您在应用程序中定义多个用于无缝证书轮换的引脚,我认为这是您想要的。

您可以使用以下bash脚本来检索图钉:

#!/bin/bash
certs=`openssl s_client -servername $1 -host $1 -port 443 -showcerts </dev/null 2>/dev/null | sed -n '/Certificate chain/,/Server certificate/p'`

rest=$certs
while [[ "$rest" =~ '-----BEGIN CERTIFICATE-----' ]]
do
 cert="${rest%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
 rest=${rest#*-----END CERTIFICATE-----}

 echo `echo "$cert" | grep 's:' | sed 's/.*s:\(.*\)/\1/'`

 echo "$cert" | openssl x509 -pubkey -noout | 
     openssl rsa -pubin -outform der 2>/dev/null | 
     openssl dgst -sha256 -binary | openssl enc -base64
done

然后使用./certs.sh www.appmattus.com运行,尽管此脚本不会打印出根证书。

另外,也可以看看https://github.com/scottyab/ssl-pin-generator ,在调试中运行该工具,以便您知道要固定的证书!

有关一般在Android上进行SSL固定的更多详细信息,我写了以下文章: Android安全性:SSL固定

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM