我正在尝试更改我已经完成的Web服务实现以使用HTTPS。
我一直在使用as3httpclientlib
(https://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.
的第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的修补版本,但仍然没有快乐。以下是错误时我的堆栈跟踪的副本。解析证书似乎是一个错误?
我也考虑过转换到SecureSocket但不幸的是它在iOS上不受支持。
https://code.google.com/p/as3crypto/issues/list
AIR配置文件支持:所有桌面都支持此功能 操作系统,但并非所有AIR for TV设备都支持。上 移动设备,在Android上支持,但在iOS上不支持。您可以 使用SecureSocket.isSupported在运行时测试支持 属性。
重新开始:
向azurewebsites.net的任何https子域发出get请求。
即以下代码将重现:
{{1}}
答案 0 :(得分:1)
我对DER decoing有同样的问题,从这个问题的修复帮助我: http://code.google.com/p/as3crypto/issues/detail?id=39
怎么样:
或者,有更好的方法可以从Air移动应用中使用https网络服务吗?
您可以尝试在as3httpclient中使用TLSSocket
中的as3crypto
替换Flash本机SecureSocket
,我认为这不应该太难。在我的项目中,我尝试同时使用SecureSoket
和TLSSocket
并站在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文件夹中。