我正在尝试在 Android 上运行 netty。它在运行 3.2 的 Motorola Xoom 平板电脑上运行良好。但它在分别运行 2.3.6 和 3.1 的 Samsung 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)
最佳答案
这与 Android 早期版本的 Cypher
实现中的错误一致,其中如果其他方的证书将 KeyUsage 扩展标志设置为 Critical 并且同时不包含 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 上运行。不要被此链接指向的看似不相关的主题所困扰。
关于android - Android 上的 Netty - InvalidKeyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10651663/