这事已至此窃听我几天。 我读过许多关于这整个问题的其他问题,仍然没有能够继续进行。
我创建了一个简单的测试应用程序只是为了测试Android上的SSL。 该应用程序只有一个按钮,点击时应用程序试图在我的测试服务器,然后使用完全相同的词组响应SSL加密连接发送的“Hello World”。
首先,我创建了使用OpenSSL的我的服务器的测试重点和测试证书。 然后,我已经按照指示在显示疯狂Bob的博客 。 我从充气城堡的网站得到了充气城堡供应商直接建立信任的密钥存储在疯狂Bob的博客如图所示,右在这一点上,我相信得到的一切。
当我试图运行我的代码,我得到了异常“IOException异常:密钥存储的版本错误。” 然后我发现这个问题在计算器上。 目前有人建议我应该尝试使用旧的充气城堡供应商,而不是最新的bcprov-jdk15on-147.jar。 我又考虑到这一点,实际上结束了从jdk13-146想尽一切bcprovider到jdk16-146。 不过每次我得到了相同的“IOExcpetion:错版密钥存储的。” 例外。
然后我发现了另一个问题,关于在计算器上类似的问题。 目前有人用512位大小的关键,而不是1024大小的关键设法摆脱异常。 嗯,我给它一个尝试,一无所获,但相同的异常。
所以在这里我现在,不知道下一步该怎么做。 我几乎运行的想法和谷歌的搜索结果。
我的网页代码是1对疯狂的鲍勃的代码复印件1份,此外,该应用程序只能只处理该按钮的活动类。 我想实现这个API上的7级。
任何帮助将不胜感激。 谢谢。
这是类似我的问题 ,当我试图请求EWS。 您可以参考这个链接并下载示例源代码然后修改它像我的答案。 希望这可以帮助!
更新 :
下面的命令为我工作(我尝试了大约2个月前):
C:\OpenSSL-Win32\bin>keytool -importcert -v -trustcacerts -file "d:/cer.cer"
-alias parkgroup_restful -keystore "D:/parkgroup-ws-client.bks"
-provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath
"D:/bcprov-jdk16-145.jar" -storetype BKS -storepass 1234567
.... /**It should show the result here**/
Trust this certificate? [no]: yes
Certificate was added to keystore
[Storing D:/parkgroup-ws-client.bks]
C:\OpenSSL-Win32\bin>keytool -list -keystore "D:/parkgroup-ws-client.bks" -provi
der org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "D:/bcprov-
jdk16-145.jar" -storetype BKS -storepass 1234567
Keystore type: BKS
Keystore provider: BC
Your keystore contains 1 entry
parkgroup_restful, Apr 10, 2012, trustedCertEntry,
Certificate fingerprint (MD5): 36:47:88:62:23:1C:F3:52:17:BE:7A:A9:94:56:19:18
你可以看到,我使用bcprov-jdk16-145.jar和OpenSSL库。 你可以尝试一下。
另一种工具来创建密钥库: http://portecle.sourceforge.net/
嗯,我也面临这个同样的情况,并解决它,我把从同一个博客帖子求助( http://nelenkov.blogspot.in/2011/12/using-custom-certificate-trust-store-on.html )由R4J简称。 以下是涉及的步骤:
- 创建自定义trustore:我用Portecle创建密钥库和进口公钥证书从我的服务器到它。
- 密钥工具-genkeypair -alias采样-keyalg RSA -sigalg SHA1withRSA -dname “CN =戒灵,OU =攻击,O =索伦企业,L =魔多,ST =中间地球,C = ME” -keypass welcome123: 用密钥对创建定制密钥库 -validity 365 -storetype PKCS12 -keystore克:\ mordor_key_store.pfx -storepass welcome123 -keysize 2048
- 然后,把它们用作nelkov的博客中提到。 您可能还需要建立的情况下,自己的自定义AbstractVerifier你的土地到那里证书为abc.com颁发的形势和验证拒绝www.abc.com
最后,以创建安全了HTTPClient,你可以这样做:
public static DefaultHttpClient getSecureHttpClient(){ SchemeRegistry schemeRegistry = new SchemeRegistry(); SSLContext sslContext = null; try { sslContext = createSslContext(true); } catch (GeneralSecurityException e) { e.printStackTrace(); } final X509HostnameVerifier delegate = new BrowserCompatHostnameVerifier(); MySSLSocketFactory socketFactory = new MySSLSocketFactory(sslContext, delegate); schemeRegistry.register(new Scheme("https", socketFactory, 443)); DefaultHttpClient client = new DefaultHttpClient(); HttpParams params = client.getParams(); client = new DefaultHttpClient(new ThreadSafeClientConnManager(params, schemeRegistry), params){ protected HttpParams determineParams(HttpRequest req) { HttpParams params = req.getParams(); // req is an HttpRequest object HttpConnectionParams.setSoTimeout(params, 60000); HttpConnectionParams.setConnectionTimeout(params, 60000); return params; } }; return client; }
对于我的选择详细原因可以参考这篇文章http://fuking-android.quora.com/Implement-HTTPS-for-android-apps-a-novices-tale 。