使用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)
我不知道我怎麼能解決這個bug。
你能幫我嗎?