Caused by: java.security.cert.CertificateException: Signature uses an insecure hash function: 1.2.840.113549.1.1.5
根據(jù)堆棧信息找到報(bào)錯(cuò)的代碼无宿,拋異常的地方是在org.conscrypt.ChainStrengthAnalyzer類下檢查證書簽名算法的方法顾患。
private static void checkSignatureAlgorithm(
X509Certificate cert) throws CertificateException {
String oid = cert.getSigAlgOID();
for (String blacklisted : SIGNATURE_ALGORITHM_OID_BLACKLIST) {
if (oid.equals(blacklisted)) {
throw new CertificateException("Signature uses an insecure hash function: " + oid);
}
}
}
調(diào)用cert.getSigAlgOID
取得老的簽名算法,遍歷本地的簽名算法版本悼潭,找到了就會(huì)拋出Caused by: java.security.cert.CertificateException: Signature uses an insecure hash function
異常钥顽。從命名上也能看到這些是不再支持的算法义屏。
private static final String[] SIGNATURE_ALGORITHM_OID_BLACKLIST = {
"1.2.840.113549.1.1.2", // md2WithRSAEncryption
"1.2.840.113549.1.1.3", // md4WithRSAEncryption
"1.2.840.113549.1.1.4", // md5WithRSAEncryption
"1.2.840.113549.1.1.5", // sha1WithRSAEncryption
"1.2.840.10040.4.3", //dsa-with-sha1
"1.2.840.10045.4.1", //ecdsa-with-sha1
};
在Android10及以上的版本上使用老簽名算法就會(huì)拋出這個(gè)異常,解決方案就是使用其他簽名算法的證書耳鸯。