2016-03-12 30 views
7

próbuję stworzyć parę kluczy za pomocą android Keystore po moim kodu:Android KeyStore: Nie można wygenerować certyfikat z podpisem własnym, datę nieprawidłowy ciąg

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

Na starcie dostałem ten wyjątek:

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) 

Przeszukałem ten problem i nie znalazłem żadnego możliwego rozwiązania, proszę o pomoc w rozwiązaniu problemu.

Uwagi: - Urządzenie: HTC M9, Android v.6.0, numer kompilacji: przykłady formatu 3.35.401.12

  • Data: Data rozpoczęcia: Sob 12 marca 23:10:08 GMT + 03 : 00 2016. Data zakończenia: czw. 12 marca 23:10:08 GMT + 03: 00 2026

Z góry dziękuję.

+1

1. Jaki jest model urządzenia, wersja Androida, numer kompilacji urządzenia z systemem Android, na którym występuje? 2. Co jest drukowane, jeśli wydrukujesz zmienne początkową i końcową tuż przed generKeyPair? –

+0

Urządzenie: HTC M9, Android v.6.0, numer kompilacji: 3.35.401.12 – Radi

+0

Przykłady formatów daty: data rozpoczęcia: sob. 12 marca 23:10:08 GMT + 03: 00 2016. Data zakończenia: czw. 12 marca 23:10:08 GMT + 03: 00 2026 – Radi

Odpowiedz

0

magazynu kluczy problem z arabski lub perski

Kiedy kluczy generuje parę kluczy, generuje samo podpisane cert. Parser ASN1 używany wewnętrznie przez system Android Keystore nie pobiera poprawnie ustawień narodowych i powoduje awarię ustawień regionalnych urządzenia z językiem od prawej do lewej. Ślad stosu próbki:

Spowodowany przez: java.lang.IllegalArgumentException: data Nieprawidłowy ciąg: data Unparseable. "÷ ððñðñððððððGMT + 00: 00" na com.android.org.bouncycastle.asn1.ASN1UTCTime (ASN1UTCTime.java : 115) na com.android.org.bouncycastle.asn1.DERUTCTime. (DERUTCTime.java:23) na com.android.org.bouncycastle.asn1.x509.Time. (Time.java:67) na Androidzie

Problemy .security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateSelfSignedCertificateWithFakeSignature (AndroidKeyStoreKeyPairGeneratorSpi.java:696) zgłoszone do google: https://code.google.com/p/android/issues/detail?id=207613

0

Jak mówi @Muralidhar, jest to known issue with AndroidKeyStore.

Android KeyStore nie prawidłowo podjąć w danej lokalizacji i powoduje awarie dla lokalizacji urządzeń z języka od prawej do lewej.

Rozwiązaniem jest ustawienie locale angielskiego przed generowania pary kluczy i zmieniając go z powrotem po wszystkim. Spójrz na this answer.