2016-03-12 23 views
7

の生成に失敗しました私は自分のコード次のアンドロイドキーストアを使用して鍵ペアを作成しようとしているmは:実行時にAndroidのキーストアは:自己署名証明書、無効な日付文字列

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

私はこの例外を得た:

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) 

この問題を調査したところ、解決策が見つかりませんでした。問題を解決するために手伝ってください。

注: - デバイス:3.35.401.12

  • 日付フォーマット例:HTC M9、アンドロイドV.6.0は、ビルド番号開始日:3月12日(土)23時10分08秒GMT + 03 :00 2016。終了日:3月12日23:10:08 GMT + 03:00 2026

ありがとうございます。アラビア語やペルシャ

キーストアは、鍵ペアを生成して

+1

1.デバイスモデル、Androidバージョン、これが発生しているAndroidデバイスのビルド番号は何ですか? 2. generateKeyPairの直前に開始変数と終了変数を出力すると、何が表示されますか? –

+0

端末:HTC M9、Android v.6.0、ビルド番号:3.35.401.12 – Radi

+0

日付形式の例:開始日:土曜日12月23日23:10:08 GMT + 03:00 2016終了日:3月12日(木)23:10:08 GMT + 03:00 2026 – Radi

答えて

0

キーストアの問題は、それが自己署名証明書を生成します。 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)Googleに報告

問題:https://code.google.com/p/android/issues/detail?id=207613

0

@Muralidharによると、それはknown issue with AndroidKeyStoreです。

Android KeyStoreがロケールを正しく取り込まないため、デバイスロケールの言語が右から左へと失敗します。

回避策は、キーペアを生成して後で元に戻す前に、英語のロケールを設定することです。 this answerをご覧ください。

関連する問題