-
-
[讨论]Android如何伪造https协议错误分析KeyStore Load Error
-
发表于: 2014-9-11 16:19 9143
-
现在的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平台工具,使用方法如下:a24K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9q4)9J5k6r3y4F1i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3u0X3M7$3E0@1K9%4V1K6i4K6u0W2j5i4y4H3P5l9`.`.Fildder是可以解析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最后总结在这里:b3fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4@1j5h3y4C8L8%4k6W2M7X3k6D9L8%4N6Q4x3X3g2U0L8$3#2Q4x3V1k6I4N6h3g2K6N6r3W2G2L8Y4y4Q4x3V1j5I4y4o6p5I4y4o6b7^5x3q4)9J5c8X3#2S2K9$3W2F1k6#2)9J5k6r3q4F1i4K6u0V1K9s2c8@1M7s2y4Q4x3X3c8U0L8$3&6F1k6h3y4@1K9h3!0F1i4K6u0V1N6i4y4A6L8X3N6Q4x3X3c8#2M7X3I4Q4x3X3c8G2M7r3g2F1j5$3!0F1L8X3g2U0N6r3W2G2L8R3`.`.,
后来仔细查看证书的"Issued by"这项内容为“DO_NOT_TRUST_FiddlerRoot”,这才明白,证书其实是我用Fiddler这个工具抓去了Https协议包,它自动生成这个网站的证书,并设置为在IE选项中可见,但是这个证书的版本不正确,但是现在很想知道浏览器是怎么通过一个https的网址来获取到和服务器通讯的证书的呢?
偶尔通过Fiddler创建证书失败看到了他创建的命令:
MakeCert.exe 是windows平台工具,使用方法如下:a24K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9q4)9J5k6r3y4F1i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3u0X3M7$3E0@1K9%4V1K6i4K6u0W2j5i4y4H3P5l9`.`.Fildder是可以解析https的证书的,而且像Wireshark 也可以看到证书

更新于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(下载)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
赞赏
雪币:
留言: