我正在尝试更改我已经完成的webservice实现以使用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.
从0700的第23行抛出
我试图访问的web服务是在azurewebsites上,因此将使用* .azurewebsites.net证书.
我也在使用ASC2编译器,这导致了一些我必须在加密项目中修复的错误,包括改变if(hex.length& 1 == 1)hex =“0”hex; if((hex.length& 1)== 1)hex =“0”hex;我发现这里发布的是com.hurlant.util.hex syntax error on air sdk 3.5
我开始认为它可能与在Azure网站上完成SSL的方式有关,因为当我完全剥离请求时,我仍然得到相同的错误,但是指向https://www.google.com,我没有得到任何错误.
他们在自己的网站上说:
HTTPS doesn’t always work. There are some minor bugs with the
as3crypto library, so for example https at yahoo and yahoo owned
domains (like delicious) don’t currently work.
我查看了as3crypt的问题列表,并想知道其中一个是否包含修复:https://code.google.com/p/as3crypto/issues/list
有没有人知道我为什么会收到这些错误(azure与他们的证书有什么不同(可能是通配符?))以及我如何解决它?是否有as3crypto的维护版本有效?或者是否有更好的方式从Air移动应用程序中使用https网络服务?
**** ****更新
我尝试使用as3crypto的修补版本,但仍然没有快乐.以下是错误时我的堆栈跟踪的副本.解析证书似乎是一个错误?
我也考虑过转换到SecureSocket但不幸的是它在iOS上不受支持.
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/SecureSocket.html
AIR profile support: This feature is supported on all desktop
operating systems, but is not supported on all AIR for TV devices. On
mobile devices, it is supported on Android, but not on iOS. You can
test for support at run time using the SecureSocket.isSupported
property.
要重新开始:
向azurewebsites.net的任何https子域发出get请求.
即以下代码将重现:
var client:HttpClient = new HttpClient();
client.get(new URI("https://httpstest.azurewebsites.net"));
最佳答案 我对DER decoing有同样的问题,从这个问题的修复帮助我:
http://code.google.com/p/as3crypto/issues/detail?id=39
关于什么:
Or is there a better way for consuming https webservices from Air mobile apps?
您可以尝试使用as3httpclient中的Flash本机SecureSocket替换as3crypto中的TLSSocket,我认为这不应该太难.在我的项目中,我尝试使用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不适合你?