Android KeyStore:无法生成自签名证书,无效的日期字符串

我正在尝试使用Android Keystore按照我的代码创建keyPair:

Calendar start = Calendar.getInstance(); Calendar end = Calendar.getInstance(); end.add(Calendar.YEAR, 10); KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(MyApplication.getInstance()) .setAlias(m_alias) .setSubject(new X500Principal("CN="+m_alias)) .setSerialNumber(BigInteger.ONE) .setStartDate(start.getTime()) .setEndDate(end.getTime()) .build(); KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore"); generator.initialize(spec); KeyPair keyPair = generator.generateKeyPair(); 

在运行时我遇到了这个exception:

 java.security.ProviderException: Failed to generate self-signed certificate at android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateKeyPair(AndroidKeyStoreKeyPairGeneratorSpi.java:504) at java.security.KeyPairGenerator$KeyPairGeneratorImpl.generateKeyPair(KeyPairGenerator.java:276) .... Caused by: java.lang.IllegalArgumentException: invalid date string: Unparseable date: "af`cab`hdedfGMT+00:00" (at offset 0) at com.android.org.bouncycastle.asn1.ASN1UTCTime.(ASN1UTCTime.java:115) at com.android.org.bouncycastle.asn1.DERUTCTime.(DERUTCTime.java:23) at com.android.org.bouncycastle.asn1.x509.Time.(Time.java:67) 

我搜索了这个问题并没有find任何可能的解决方案,请帮助我解决问题。

注: – 设备:HTC M9,Android v.6.0,内部版本号:3.35.401.12

  • 日期格式示例:开始日期:星期六3月12日23:10:08 GMT + 03:00 2016。 结束日期:3月12日星期四23:10:08 GMT + 03:00 2026

提前致谢。

阿拉伯语或波斯语的重点商店问题

当密钥库生成密钥对时,它会生成自签名证书。 Android Keystore内部使用的ASN1解析器无法正确接受语言环境,并且会导致设备语言环境从右到左出现故障。 样本堆栈跟踪:

引起:java.lang.IllegalArgumentException:无效日期字符串:无法解析的日期:“÷ððñðñððððððGMT+ 00:00”,位于com.android.org.bouncycastle.asn1.ASN1UTCTime。(ASN1UTCTime.java:115)com.android.org .bouncycastle.asn1.DERUTCTime。(DERUTCTime.java:23)at com.android.org.bouncycastle.asn1.x509.Time。(Time.java:67)at android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateSelfSignedCertificateWithFakeSignature(AndroidKeyStoreKeyPairGeneratorSpi.java) :696)

报告给谷歌的问题: https : //code.google.com/p/android/issues/detail? id = 207613

正如@Muralidhar所说,这是AndroidKeyStore的一个已知问题 。

Android KeyStore没有正确接受语言环境,它会导致设备语言环境的失败,语言从右到左。

解决方法是在生成密钥对之前设置英语区域设置并最终将其更改回来。 看看这个答案 。