4

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

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

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

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

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 https://code.google.com/p/as3crypto/source/browse/trunk/as3crypto/src/com/hurlant/crypto/cert/X509Certificate.as?spec=svn28&r=7第 225 行的错误

当我使用最新版本的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编译器,这导致了我必须在加密项目中修复的几个错误,包括我发现在 air sdk 3.5 上发布的if (hex.length&1==1) hex="0"+hex;com.hurlant.util.hex语法错误if ((hex.length&1)==1) hex="0"+hex;

我开始认为这可能与在 Azure 网站上完成 SSL 的方式有关,因为当我完全剥离请求时,我仍然得到同样的错误,但是指向https://www.google.com,我没有错误。

他们在他们的网站上声明:

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

我浏览了 as3crypt 的问题列表,想知道其中一个是否包含修复:https ://code.google.com/p/as3crypto/issues/list

有谁知道我为什么会收到这些错误(天蓝色对他们的证书做了什么不同的事情(可能是通配符?))以及我该如何解决?是否有可用的 as3crypto 维护版本?或者有没有更好的方法来使用 Air 移动应用程序中的 https 网络服务?

****更新****

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

在此处输入图像描述

我还研究过改用 SecureSocket,但不幸的是 iOS 不支持它。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/SecureSocket.html

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

重建:

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

即以下代码将重现:

var client:HttpClient = new HttpClient();
client.get(new URI("https://httpstest.azurewebsites.net"));
4

2 回答 2

1

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

关于什么:

或者有没有更好的方法来使用 Air 移动应用程序中的 https 网络服务?

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

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

升级版:

我能够重现您的问题并使用我修补的 as3crypto lib 测试证书解析(它仍然允许更深入地解析),我还测试了相同证书的解析,但使用浏览器下载 - 两种情况下的结果相同(如在您的屏幕截图上),因此结论是 TLSSocket 加载了正确且完整的证书字节,但无法解析它。我试图修复解析,但它需要更深入地研究 as3crypto DER 格式的实现。所以恐怕使用 as3httpclient 的唯一方法是修复 DER 解析。

顺便说一句,为什么标准不URLLoader适合您?

于 2013-09-12T15:15:18.687 回答
1

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

解压后,as3crypto.swc 位于 libs 文件夹中。

于 2013-11-18T02:38:09.000 回答