java如何在Android中使用自签名SSL证书
这件事已经困扰我好几天了。我已经阅读了很多关于整个问题的其他问题,但仍然无法继续
我创建了一个简单的测试应用程序,只是为了在Android上测试SSL。该应用程序只有一个按钮,单击该按钮时,该应用程序会尝试通过SSL加密连接将“Hello World”发送到我的测试服务器,然后该服务器会使用完全相同的短语进行响应
首先,我使用openssl为我的服务器创建了一个测试密钥和测试证书。然后我一直遵循Crazy Bob's blog中的说明。我直接从Bouncy Castle的网站上获得了Bouncy Castle提供商,创建了一个可信的密钥库,如疯狂鲍勃的博客所示,我相信在这一点上一切都是正确的
当我试图运行我的代码时,我得到了异常“IOException:密钥存储的错误版本”然后我在StackOverflow上找到了this question。有人建议我应该尝试使用较旧的Bouncy Castle提供者,而不是最新的bcprov-jdk15on-147。jar。我考虑到了这一点,实际上最终尝试了从jdk13-146到jdk16-146的每一个bcprovider。但每次我都会收到同样的“IoException:密钥存储的错误版本”例外
然后我在StackOverflow上发现了类似的问题。有人设法通过使用512位大小的密钥而不是1024位大小的密钥来消除该异常。嗯,我试了一下,什么也没做,但还是一样的例外
所以我现在在这里,想知道下一步该做什么。我的想法和谷歌搜索结果都快用完了
我的web代码是crazy bob代码的1对1副本,除此之外,应用程序只有只处理按钮的activity类。我试图在API级别7上实现这一点
任何帮助都将不胜感激。谢谢
# 1 楼答案
2种选择:
您可以按照自己的方式创建自己的密钥存储,我已经这样做了,下面是我存储的代码中的说明(因为让它工作起来非常耗时):
要生成PKS,请执行以下操作:
创建信任所有密钥库并忘记所有这些。基本上,您可以无错误地使用任何SSL。只要在生产中禁用它,如果你真的在乎的话。下面是我用来准备SSL客户端的代码(假设您使用ApacheHTTP客户端)
# 2 楼答案
当我试图请求EWS时,情况类似。您可以参考this link并下载example source code,然后像我的答案一样修改它。希望这有帮助
更新:
以下命令对我有效(我大约2个月前尝试过):
您可以看到,我使用了bcprov-jdk16-145。jar和openssl库。你可以试试
另一个创建密钥库的工具:http://portecle.sourceforge.net/
# 3 楼答案
我也面临同样的情况,为了解决这个问题,我从R4j引用的同一篇博文(http://nelenkov.blogspot.in/2011/12/using-custom-certificate-trust-store-on.html)中获得了帮助。涉及的步骤如下:
最后,要创建安全的HTTPClient,您可以执行以下操作:
关于我选择的详细原因,你可以参考这篇文章http://fuking-android.quora.com/Implement-HTTPS-for-android-apps-a-novices-tale