4

Android では、このコードで作成されたクライアント証明書との相互認証で TLS 接続を使用します。

private static X509Certificate generateX509V1Certificate(KeyPair pair, SecureRandom sr)
{
  String dn="CN="+sUuid.toString();
  final Calendar calendar = Calendar.getInstance();
  calendar.add(Calendar.HOUR, -1);
  final Date startDate = new Date(calendar.getTimeInMillis());
  calendar.add(Calendar.YEAR, 1);
  final Date expiryDate = new Date(calendar.getTimeInMillis());
  final BigInteger serialNumber =   
    BigInteger.valueOf(Math.abs(System.currentTimeMillis()));
  X509V1CertificateGenerator certGen = new X509V1CertificateGenerator();
  X500Principal dnName = new X500Principal(dn);
  certGen.setSerialNumber(serialNumber);
  certGen.setIssuerDN(dnName);
  certGen.setNotBefore(startDate);
  certGen.setNotAfter(expiryDate);
  certGen.setSubjectDN(dnName); // note: same as issuer
  certGen.setPublicKey(pair.getPublic());
  certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
  if (VERSION.SDK_INT<VERSION_CODES.GINGERBREAD)
    return certGen.generateX509Certificate(pair.getPrivate(), "BC");
  else
    return  certGen.generate(pair.getPrivate(), sr);
}

キーペアのアルゴリズムは「RSA」です。暗号アルゴリズムは「RSA/ECB/PKCS1Padding」です。

Jelly Bean バージョンの前は問題なく動作しています。

Jelly bean で、呼び出すとエラーが発生する

socket.getSession().getPeerCertificates()

プロセスはログで強制終了されました:

E/NativeCrypto(1133): error:140C10F7:SSL routines:SSL_SET_PKEY:unknown certificate type
A/libc(1133): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 1233 (AsyncTask #1)

このバグを解決する方法がわかりません。

手伝って頂けますか ?

4

2 に答える 2

2

生成された証明書をファイルにダンプし、OpenSSL 1.0 の解析を試みます。これは、Android が証明書を解析するために使用するコードと同じであるため、エラーを見つけるのに役立ちます。単に v1 証明書をサポートしていないだけかもしれません。v3 証明書を生成してみてください。

于 2012-08-28T07:24:44.343 に答える
2

この問題と次のエラーでもう 1 つ発生しました: Fatal signal 11 (SIGSEGV) at 0x3f80005c (code=1), thread 11709 (FinalizerDaemon)

KeyChain API からのキーを使用してクライアント SSL 認証を使用するアプリケーションで、Galaxy S3 で 4.1.1 にアップグレードしたときにランダムに発生し始めました。

4.0.4 では問題なく動作しました (幸い、ダウングレードできました)。

100% 確実ではありませんが、4.1.1 には SSL に関連するかなりの数のバグがあるようです。これを確認してください: http://code.google.com/p/android/issues/detail?id=35141 およびこれ: http://code.google.com/p/android/issues/detail?id=34577 (現在のケースには関係ないかもしれません) また、このフォーラムの投稿: https://groups.google.com /forum/?fromgroups=#!topic/android-developers/Lj2iHX4prds KeyChain API から返された PrivateKey オブジェクトで GC を実行する際の SEGFAULT についての言及があります。

したがって、最終的なアドバイスとして - できるだけ長く 4.0.4 にとどまるか、4.1.2 に進むか - いくつかのバグ修正があるようです。

また、私が抱えていた 2 つの問題が 4.1.2 エミュレーターには存在しないことを確認できます。Galaxy S3 用の 4.1.2 イメージがないため、実際のデバイス用に修正されていることを確認できません (別のデバイスはありません)。

それがうまくいくことを願っています。

于 2012-12-03T22:17:33.090 に答える