我正在尝试更改我已经完成的 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.

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;,我发现它发布在这里 com.hurlant.util.hex syntax error on air sdk 3.5

我开始认为这可能与在 Azure 网站上执行 SSL 的方式有关,因为当我完全删除请求时,我仍然收到相同的错误,但是指向 https://www.google.com ,我没有收到任何错误。

他们在他们的网站上说:



我查看了 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



重新创建:

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

即以下代码将重现:
var client:HttpClient = new HttpClient();
client.get(new URI("https://httpstest.azurewebsites.net"));

最佳答案

我在 DER 解码方面遇到了同样的问题,解决这个问题对我有帮助:
http://code.google.com/p/as3crypto/issues/detail?id=39

关于什么:



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

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

更新:

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

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

关于actionscript-3 - 使用 as3 httpclient lib 从 as3 air 项目到 web 服务的 https,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18703215/

10-11 02:09