将Android与Retrofit绑定的证书



我在我的应用程序中实现ssl固定,我使用叶子节点证书,这是我的网站在证书层次结构。

val certificatePinner = CertificatePinner.Builder()
.add(
BuildConfig.DOMAIN,
Constants.SHA256_HASH
)
okHttpClientBuilder.certificatePinner(certificatePinner.build())
.build()

在证书保持不变之前,这是完美的。但主要问题是让应用程序保持最新的SHA256哈希,因为证书每3个月到期一次。如果我错过了更新新的SHA256哈希,由于证书不匹配,应用程序停止工作。有什么办法可以避免这种情况吗?提前谢谢。

使用根证书的SHA散列解决了我的问题,因为它具有更长的生命周期

我不得不处理一个类似的情况:我必须实现证书固定,我不想同步应用程序发布与证书过期。

我实现的解决方案(我知道是一个妥协)是这样工作的:如果证书应用程序使用仍然有效,应用程序应用证书固定。如果证书过期,应用程序将不使用证书固定。这样,应用程序就"暴露"在没有证书绑定的情况下了。在证书过期日期和应用程序更新之间(使用新的证书哈希码)。在此期间,应用程序是暴露的,但它继续工作!

代码:

public abstract class CertificatePinnerManager {
private CertificatePinnerManager() {
}
public static final String DATE_FORMAT="dd/MM/yyyy";
public static final String CERTIFICATE_PINNING_END_CHECK = "12/09/2021";
public static final String CERTIFICATE_SHA_256 = "sha256/zzz/yyy/xxxx";
public static CertificatePinner generateCertificatePinner() {
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
Date strDate = null;
try {
strDate = sdf.parse(CERTIFICATE_PINNING_END_CHECK);
} catch (ParseException e) {
e.printStackTrace();
}
if (new Date().before(strDate)) {
// Certificate pinning enabled
return new CertificatePinner.Builder()
// domain to check
.add("dummy.com", CERTIFICATE_SHA_256)
.build();
} else {
// disable certificate pinning
return new CertificatePinner.Builder().build();
}
}
}
// create okhttp client
OkHttpClient httpClient = new OkHttpClient.Builder()
.certificatePinner(CertificatePinnerManager.generateCertificatePinner())
.build()

我认为这将是一个更好的解决方案管理证书SHA远程配置,但目前,这是我的解决方案。: D

我希望它能帮助你。

相关内容

  • 没有找到相关文章

最新更新