首页 文章 精选 留言 我的

精选列表

搜索[self],共4485篇文章
优秀的个人博客,低调大师

Android 使用httpclient对self-signed certificate网站进行SSL连线

Android SDK在进行https连线时,对于自签署的凭证是会拒绝连线的,会得到Not trusted server certificate的例外。如果使用HttpsURLConnection来连线,网络上可以找到一些破解方法,在此不多谈。使用apache httpclient其实执行效率比较差一点,但是他最大的好处就是有内建的机制储存cookie,并且也可以跟随server作自动转址。网络上资料比较多的是httpclient 3.x版,Android使用httpclient 4 (而且还有些实作被拿掉)唯一找到比较可信的来源是apache httpclient官方的example。节录重点段落如下: KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream instream = new FileInputStream(new File("my.keystore")); try { trustStore.load(instream, "nopassword".toCharArray()); } finally { instream.close(); } SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); Scheme sch = new Scheme("https", socketFactory, 443); httpclient.getConnectionManager().getSchemeRegistry().register(sch); 直接把这段拿去用当然只有一个死字。本来看讨论以为是要制造一个假的空凭证骗过httpclient,从Android档案系统有点微妙开始改来改去,一连串不同的例外或直接crash就不多谈了。解决了档案路径,到底有没有建立等等方面的问题之后才终于发现,假凭证是不行的… 1.所以首先,开启你PC或Mac上的浏览器连上目标网站,从凭证管理的地方把该网站的凭证汇出。每个浏览器做法都不同,请各位发挥正常工程师的水准做完这件事。以Firefox为例,找到site名后选汇出,多半是会得到一个档名为your_site_name.crt的X509(PEM)凭证档。为了之后使用方便,先把这档案复制一份并把档名改为your_site_name.pem。 2.将这个凭证格式从PEM转为BKS格式。 这是关键性的一步啊。 KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); 这行中的getDefaultType到底会get到什么type呢?答案:在Android中是BKS。有J2ME经验的人会想说,我看多半是跟J2ME一样的Sun JKS格式吧,而且,我不要用getDefaultType就好了,我可以自己指定为PEM, JKS格式啊。是的,你可以。只是你会得到错误讯息说KeyStore JKS implementation not found。测了半天,看起来Android的httpclient只吃BKS就对了,其他都没实作。 3.那格式要怎么转?根据网路上找到的资料,可以使用KeyTool IUI这个Java工具。打开后从介面选create → KeyStore,格式选BKS,自己命名一下,要不要设密码都可。接着选import → Keystore’s entry → Trusted certificate → Regular certificate。Source的部分选PEM并选到刚刚浏览器得到的那个档,Target当然选BKS和刚create出来的档。按OK之后会跳出Entries视窗,下方提示你enter new alias,随便取个名字后ok连打,顺利的话你应该就会有一个your_keystore.bks之类的档案了。 4.要把凭证档放在Android app能读到的地方,做法有两种,放在SD card中,或直接放在resources中。 [方案一]放在SD card的情形:首先模拟器要挂上SD card,这在Eclipse用AVD工具产生avd时就可以顺便指定SD了。如果习惯用指令的话,也可以用如下指令产生image并mount上: $ mksdcard 512M my_sdcard.so $ emulator -sdcard ./my_sdcard.so 再来要把凭证档copy到SD card中,目前只知道指令的做法: $ adb push file_path/your_keystore.bks /sdcard 如果有显示类似ftp传输速度之类的讯息应该就是成功了。 接着把android程式码中档案部分改一改 FileInputStream instream = new FileInputStream(new File("/sdcard/your_keystore.bks")); trustStore.load(instream, null); 如果没设密码,可以把keystore load的第二个密码参数改成null,有设的话当然就改成你的密码。 基本上这样应该就大功告成了 [方案二]再讲讲凭证放在resources的方法。 首先把档案复制到专案下的res/raw/your_keystore.bks。 Eclipse没有错误的话就ok,否则多半是你档名不合规格,稍微改改。接着取用方法是把android程式码改成: InputStream instream = getResources().openRawResource(R.raw.your_keystore); 其它同SD card。 5.还有一个地方要注意,就是SSL port。 Scheme sch = new Scheme("https", socketFactory, 443); 如果你要连的网站不是用port 443,这边请记得改掉。 6.另外如果要使用档案放在resources的做法,getResources()应该只能在Activity class中执行,如果另外包装连线类别的话请不要直接服用上面的程式码,要自行从context抓到资源再传过去。 本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/1230809,如需转载请自行联系原作者

优秀的个人博客,低调大师

此用户不允许自调用(isv.self-invoke-forbidden)-处理方案

说明 如果您在调用蚂蚁金服接口出现这个错误,说明您请求的appid(年份开头)属于第三方应用不允许自己appid请求蚂蚁金服接口 简单来说:如果您出现这个报错说明不可以自调用,只能走以下两个方案进行接口测试。 自用型应用与第三方应用区别:[url]https://openclub.alipay.com/read.php?tid=6328&fid=68[/url] 处理方案 1.创建一个自用型应用测试,如何创建应用请参考该帖:[url]https://openclub.alipay.com/read.php?tid=1606&fid=72[/url] 2.代替商户发起请求,使用第三方应用授权接口获取商户的app_auth_token,带上商户授权的app_auth_token请求。 如何使用沙箱测试第

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册