2012-08-28 48 views
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) 

我不知道我怎麼能解決這個bug。

你能幫我嗎?

回答

2

將生成的證書轉儲到文件並嘗試解析它OpenSSL 1.0。這是Android用來解析證書的相同代碼,所以它應該可以幫助您找到錯誤。也許他們不再支持v1證書,你可以嘗試生成v3版本。

2

我只是有這個問題,並多了一個與以下錯誤:在0x3f80005c 致命信號11(SIGSEGV)(代碼= 1),螺紋11709(FinalizerDaemon)

他們開始在隨機發生的事情,當我升級到4.1 .1在使用客戶端SSL驗證的應用程序上通過使用KeyChain API中的密鑰在Galaxy S3上運行。

它在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圖像,所以我無法確認它們是否適用於真實設備(沒有其他設備)。

希望heps。