我正在尝试更改我已经完成的 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
,我觉得应该不会太难。在我的项目中,我尝试同时使用 SecureSoket
和 TLSSocket
并站在 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/