Android KeyStore: failed to create self-signed certificate, invalid date string

I am trying to create keyPair using Keystore android after my code:

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(); 

At runtime, I got this 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.<init>(ASN1UTCTime.java:115) at com.android.org.bouncycastle.asn1.DERUTCTime.<init>(DERUTCTime.java:23) at com.android.org.bouncycastle.asn1.x509.Time.<init>(Time.java:67) 

I searched for this problem and did not find a possible solution. Please help fix the problem.

Notes: - Device: HTC M9, Android v.6.0, build number: 3.35.401.12

  • Examples of the date format: start Date: Wed 12 Mar 23:10:08 GMT + 03: 00 2016. End date: Thu 12 Mar 23:10:08 GMT + 03: 00 2026

Thanks in advance.

+7
java android x509certificate
source share
2 answers

Problem with keystore with Arabic or Persian

When keystore generates a key pair, it generates a self-signed certificate. The ASN1 parser, used internally using Android Keystore, incorrectly accepts the locale and causes localization of a device with a language from right to left. Stack trace example:

Called: java.lang.IllegalArgumentException: invalid date string: Unpaired date: "÷ ððñððððððGMT + 00: 00" on 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) in android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateSelfSignedCertificateWithFakeSignature (AndroidKeyStoreKeyPairGeneratorSpi.java:696)

Issues reported by google: https://code.google.com/p/android/issues/detail?id=207613

0
source share

As @Muralidhar says, this is a known issue with AndroidKeyStore .

Android KeyStore uses the locale incorrectly and causes localization of a device with a language from right to left.

The workaround is to set the English language before creating a key pair and change it later. Check out this answer .

0
source share

All Articles