-
-
[讨论]Android如何伪造https协议错误分析KeyStore Load Error
-
发表于: 2014-9-11 16:19 9044
-
现在的android程序,也很流行webView中嵌入js来和服务器通讯,多半是已有的web站里已经做好了,用android再写一遍很麻烦,所以很多人都这样干了,其实效果都一样,都是和服务器进行交互,我们知道android通过webView可以支持javascript和android代码的互相调用。一般情况下协议交互的JS写的简单一点的看js源码就能理出来,js写的复杂一点的再通过IE/chrome的F12功能进行动态调试下可以得到调用栈,最终确定代码位置,IE11调试面板中NetWork查看网络通讯的http协议,双击某条协议即可看到详细的协议头和协议内容,很是方便。总的来说js构建的http/https协议很容易追到post数据的参数。
对于https来说,最近碰到一个问题,我认为浏览器能和服务器通讯也是需要构建一个https协议证书的,我自己使用android代码构建https协议的过程中,在Internet options-->content->Certificates这个窗口里面找到我访问的网站的证书,并导出。结果使用
后来仔细查看证书的"Issued by"这项内容为“DO_NOT_TRUST_FiddlerRoot”,这才明白,证书其实是我用Fiddler这个工具抓去了Https协议包,它自动生成这个网站的证书,并设置为在IE选项中可见,但是这个证书的版本不正确,但是现在很想知道浏览器是怎么通过一个https的网址来获取到和服务器通讯的证书的呢?
偶尔通过Fiddler创建证书失败看到了他创建的命令:
MakeCert.exe 是windows平台工具,使用方法如下:http://msdn.microsoft.com/zh-cn/library/bfsktky3.aspxFildder是可以解析https的证书的,而且像Wireshark 也可以看到证书,我访问的网站的证书,Fillder却创建解析失败。初步不准备用android代码去实现https协议了,取而代之的是使用webView加载这个html页面,手动提交post请求,这样可以解决问题,希望能帮到有需求的人。
更新于2014/10/9
问题最终解决了,(链接)参考,如下,使用keytool先把网站的浏览器证书扒下来,然后使用如下命令进行转换:
keytool -importcert -v -trustcacerts -file "haha.cer" -alias IntermediateCA -keystore "myKeystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-145.jar" -storetype BKS -storepass mysecret
keytool -list -keystore "myKeystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-145.jar" -storetype BKS -storepass mysecret
其中证书为haha.cer,provider为bcprov-jdk16-145.jar(下载)
对于https来说,最近碰到一个问题,我认为浏览器能和服务器通讯也是需要构建一个https协议证书的,我自己使用android代码构建https协议的过程中,在Internet options-->content->Certificates这个窗口里面找到我访问的网站的证书,并导出。结果使用
inputStream_keyStore = context.getAssets().open(assetpathofKeyStore); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(inputStream_keyStore, null);出现“java.io.IOException: Wrong version of key store.”的错误,这个错误被牛人Deanna最后总结在这里:http://stackoverflow.com/questions/14114480/making-an-https-connection-using-url-openconnection,
后来仔细查看证书的"Issued by"这项内容为“DO_NOT_TRUST_FiddlerRoot”,这才明白,证书其实是我用Fiddler这个工具抓去了Https协议包,它自动生成这个网站的证书,并设置为在IE选项中可见,但是这个证书的版本不正确,但是现在很想知道浏览器是怎么通过一个https的网址来获取到和服务器通讯的证书的呢?
偶尔通过Fiddler创建证书失败看到了他创建的命令:
MakeCert.exe 是windows平台工具,使用方法如下:http://msdn.microsoft.com/zh-cn/library/bfsktky3.aspxFildder是可以解析https的证书的,而且像Wireshark 也可以看到证书,我访问的网站的证书,Fillder却创建解析失败。初步不准备用android代码去实现https协议了,取而代之的是使用webView加载这个html页面,手动提交post请求,这样可以解决问题,希望能帮到有需求的人。
更新于2014/10/9
问题最终解决了,(链接)参考,如下,使用keytool先把网站的浏览器证书扒下来,然后使用如下命令进行转换:
keytool -importcert -v -trustcacerts -file "haha.cer" -alias IntermediateCA -keystore "myKeystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-145.jar" -storetype BKS -storepass mysecret
keytool -list -keystore "myKeystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-145.jar" -storetype BKS -storepass mysecret
其中证书为haha.cer,provider为bcprov-jdk16-145.jar(下载)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
看原图
赞赏
雪币:
留言: