与果冻豆的客户证书错误

时间:2012-08-28 07:15:57

标签: android certificate ssl

使用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)

我不知道如何解决这个错误。

你能帮帮我吗?

2 个答案:

答案 0 :(得分:2)

将生成的证书转储到文件并尝试解析它OpenSSL 1.0。这与Android用于解析证书的代码相同,因此它应该可以帮助您找到错误。也许他们不再支持v1证书,你可以尝试生成一个v3证书。

答案 1 :(得分:2)

我刚刚遇到此问题,另外还有一个错误: 致命信号11(SIGSEGV)位于0x3f80005c(代码= 1),线程11709(FinalizerDaemon)

当我在使用客户端SSL身份验证的应用程序上通过使用KeyChain API中的密钥升级到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 - 似乎有一些错误修复。

此外,我可以确认4.1.2仿真器上没有我遇到的两个问题。 Galaxy S3没有4.1.2图像,所以我无法确认它们是否适用于真实设备(没有其他设备)。

希望能够成功。