2

我正在尝试在 android 上运行 netty。它在运行 3.2 的摩托罗拉 Xoom 平板电脑上运行良好。但它在分别运行 2.3.6 和 3.1 的三星 Galaxy S 和 Galaxy Tab 上不断失败。异常跟踪如下。有没有人早点遇到过这个问题..任何解决方法..谢谢。

Caused by: java.security.InvalidKeyException: The public key in the 
certificate cannot be used for ENCRYPT_MODE 
     at javax.crypto.Cipher.init(Cipher.java:815) 
     at javax.crypto.Cipher.init(Cipher.java:747) 
     at 
org.apache.harmony.xnet.provider.jsse.ClientHandshakeImpl.processServerHelloDone(ClientHandshakeImpl.java: 
418) 
4

2 回答 2

2

这与早期版本的 Android 实现中的错误一致,Cypher如果对方的证书将 KeyUsage 扩展标志设置为关键,同时不包括 KeyUsage "DataEncipherment",则 Android 的实现Cipher认为证书无效并抛出显然不是正确行为的异常。

我在这里找到了一个解决方法:http ://code.google.com/p/android/issues/detail?id=9307#c180但后来我对其进行了改进并发回了:http ://code.google.com/ p/android/issues/detail?id=9307#c184。这让我的代码在 Android 2.2 上运行。不要被此链接指向的看似无关的主题所推迟。

于 2013-09-03T12:40:36.463 回答
0

这应该在 3.0 或更高版本中修复:http ://code.google.com/p/android/issues/detail?id=12955

根据您提供的行号,您拥有 javax/crypto/Cipher.java 的旧版本。这个补丁应该可以修复它。

编辑:
如果这不能解决它,SSL 引擎可能没有启用与您的服务器兼容的密码套件。您可以使用openssl s_client connect此处给出的脚本来查看您的服务器喜欢什么密码并启用这些密码。

于 2012-05-29T21:18:42.047 回答