使用as3httpclientlib从as3 air项目https到webservice

时间:2013-09-09 16:55:34

标签: actionscript-3 ssl air azure-web-sites as3crypto

我正在尝试更改我已经完成的Web服务实现以使用HTTPS。

我一直在使用as3httpclientlibhttps://code.google.com/p/as3httpclientlib/)。

当我使用非ssl端点时,它按预期工作。

但是,当我从下载页面(https://code.google.com/p/as3crypto/downloads/list)或包含的as3crypto-1_3_patched.swc使用SSL端点和版本1.3 as3crypt时,我得到以下内容:

I DONT KNOW HOW TO HANDLE DER stuff of TYPE 22
I DONT KNOW HOW TO HANDLE DER stuff of TYPE 22
I DONT KNOW HOW TO HANDLE DER stuff of TYPE 22
I DONT KNOW HOW TO HANDLE DER stuff of TYPE 22
I DONT KNOW HOW TO HANDLE DER stuff of TYPE 12
I DONT KNOW HOW TO HANDLE DER stuff of TYPE 22
I DONT KNOW HOW TO HANDLE DER stuff of TYPE 22
I DONT KNOW HOW TO HANDLE DER stuff of TYPE 22
I DONT KNOW HOW TO HANDLE DER stuff of TYPE 22
[Fault] exception, information=TypeError: Error #1009: Cannot access a property or method of a null object reference.

源自DER.as的第123行的迹线 https://code.google.com/p/as3crypto/source/browse/trunk/as3crypto/src/com/hurlant/util/der/DER.as?r=7 以及X509Certificate.as第225行的错误 https://code.google.com/p/as3crypto/source/browse/trunk/as3crypto/src/com/hurlant/crypto/cert/X509Certificate.as?spec=svn28&r=7

当我使用最新版本的as3crypt https://code.google.com/p/as3crypto/source/detail?r=28时,我会

[Fault] exception, information=Error: couldn't parse DER stream.

https://code.google.com/p/as3crypto/source/browse/trunk/as3crypto/src/com/hurlant/util/asn1/type/SetType.as

的第23行引出

我尝试访问的网络服务是在azurewebsites上,因此将使用* .azurewebsites.net证书。

我也在使用ASC2编译器,这导致了一些我必须在加密项目中修复的错误,包括将if (hex.length&1==1) hex="0"+hex;更改为if ((hex.length&1)==1) hex="0"+hex;我在此处发布var client:HttpClient = new HttpClient(); client.get(new URI("https://httpstest.azurewebsites.net")); {{ 3}}

我开始认为它可能与在Azure网站上执行SSL的方式有关,因为当我完全删除请求时,我仍然会收到相同的错误,但是指向com.hurlant.util.hex syntax error on air sdk 3.5,我得到没有错误。

他们在自己的网站上说:

  

HTTPS并不总是有效。有一些小错误   as3crypto库,例如在雅虎和雅虎拥有的https   域名(如美味)目前无效。

我查看了as3crypt的问题列表,并想知道其中一个是否包含修复:https://www.google.com

有谁知道我为什么会收到这些错误(azure与他们的证书做的不同(它可能是通配符吗?))以及我如何修复它?是否有as3crypto的维护版本有效?或者,有更好的方法可以从Air移动应用中使用https网络服务吗?

**** **** UPDATE

我尝试使用as3crypto的修补版本,但仍然没有快乐。以下是错误时我的堆栈跟踪的副本。解析证书似乎是一个错误?

enter image description here

我也考虑过转换到SecureSocket但不幸的是它在iOS上不受支持。

https://code.google.com/p/as3crypto/issues/list

  

AIR配置文件支持:所有桌面都支持此功能   操作系统,但并非所有AIR for TV设备都支持。上   移动设备,在Android上支持,但在iOS上不支持。您可以   使用SecureSocket.isSupported在运行时测试支持   属性。

重新开始:

向azurewebsites.net的任何https子域发出get请求。

即以下代码将重现:

{{1}}

2 个答案:

答案 0 :(得分:1)

我对DER decoing有同样的问题,从这个问题的修复帮助我: http://code.google.com/p/as3crypto/issues/detail?id=39

怎么样:

  

或者,有更好的方法可以从Air移动应用中使用https网络服务吗?

您可以尝试在as3httpclient中使用TLSSocket中的as3crypto替换Flash本机SecureSocket,我认为这不应该太难。在我的项目中,我尝试同时使用SecureSoketTLSSocket并站在TLSSocket上,因为SecureSoket需要FP 11,并且不适用于我们使用的自签名证书测试服务器,但SecureSoket也可以正常工作,并且表现出更好的TLSSocket性能。你也可以从我的github(https://github.com/fsbmain/as3public)中获取已经修补过的as3crypto版本:)

如果您仍有问题,请提供您的网络服务的端点,以便我能够测试它。

UPD:

我能够重现您的问题并使用我的修补的as3crypto lib测试证书解析(它仍然允许更深入地解析),我还测试了相同证书的解析但是通过浏览器下载 - 两者的结果相同案例(如截图所示),结论是TLSSocket加载了正确的全部字节证书,但无法解析它。我试图修复解析,但它需要深入研究as3crypto DER格式实现。所以我担心使用as3httpclient的唯一方法是修复DER解析。

BTW为什么标准URLLoader不适合你?

答案 1 :(得分:1)

这里的as3crypto.swc文件:http://www.igniterealtime.org/downloads/download-landing.jsp?file=xiff/xiff_3_1_0.zip解决了我的问题。

解压后,

as3crypto.swc位于libs文件夹中。