https от проекта as3 air до веб-сервиса с использованием as3httpclientlib
Я пытаюсь изменить реализацию веб-сервиса, которую я сделал, чтобы использовать HTTPS.
Я использовал as3httpclientlib
( https://code.google.com/p/as3httpclientlib/).
Когда я использую конечную точку не-ssl, она работает как положено.
Однако, когда я использую конечную точку SSL и версию 1.3 as3crypt со страницы загрузок ( https://code.google.com/p/as3crypto/downloads/list) или включенной 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.
Со следами, происходящими из линии 123 DER.as https://code.google.com/p/as3crypto/source/browse/trunk/as3crypto/src/com/hurlant/util/der/DER.as?r=7 и ошибка из строки 225 X509Certificate.as
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 https://code.google.com/p/as3crypto/source/browse/trunk/as3crypto/src/com/hurlant/util/asn1/type/SetType.as
Веб-служба, к которой я пытаюсь получить доступ, находится на веб-сайтах Azure, поэтому будет использовать сертификат *.azurewebsites.net.
Я также использую компилятор ASC2, это вызвало пару ошибок, которые мне пришлось исправить в проекте crypto, включая изменение if (hex.length&1==1) hex="0"+hex;
в if ((hex.length&1)==1) hex="0"+hex;
который я нашел размещенный здесь com.hurlant.util.hex синтаксическая ошибка на воздухе SDK 3.5
Я начинаю думать, что это может быть связано с тем, как выполняется SSL на веб-сайтах Azure, поскольку, когда я полностью отрезаю запрос, я все равно получаю ту же ошибку, однако, указывая на https://www.google.com/, я не получить ошибку.
Они заявляют на своем сайте:
HTTPS не всегда работает. Есть некоторые незначительные ошибки с библиотекой as3crypto, поэтому, например, https на доменах, принадлежащих Yahoo и Yahoo, (например, очень вкусные) в настоящее время не работают.
Я просмотрел список проблем для as3crypt, и мне было интересно, есть ли в одной из них исправление: https://code.google.com/p/as3crypto/issues/list
Кто-нибудь знает, почему я получаю эти ошибки (что Azure делает по-другому с их сертификатом (это может быть подстановочный знак?)) И как я могу это исправить? Есть ли поддерживаемая версия as3crypto, которая работает? Или есть ли лучший способ использовать веб-сервисы https из мобильных приложений Air?
****ОБНОВИТЬ****
Я пытался использовать пропатченную версию 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.
ВОССТАНОВИТЬ:
Отправьте запрос на получение любого https-субдомена azurewebsites.net.
то есть следующий код будет воспроизводить:
var client:HttpClient = new HttpClient();
client.get(new URI("https://httpstest.azurewebsites.net"));
2 ответа
У меня та же проблема с декодированием DER, и мне помогло ее исправить: http://code.google.com/p/as3crypto/issues/detail?id=39
Как насчет:
Или есть ли лучший способ использовать веб-сервисы https из мобильных приложений Air?
Вы можете попробовать заменить TLSSocket
от as3crypto
с Flash родной SecureSocket
в as3httpclient, я думаю, это не должно быть слишком сложно сделать. В своем проекте я попытался использовать оба SecureSoket
а также TLSSocket
и стоял на TLSSocket
так как SecureSoket
требует FP 11 и не работает с самозаверяющими сертификатами, которые мы используем на тестовом сервере, но SecureSoket
также отлично работает и показал еще лучшую производительность, что TLSSocket
, Вы также можете получить уже исправленную версию as3crypto с моего github ( https://github.com/fsbmain/as3public):)
Если у вас все еще есть проблемы, пожалуйста, предоставьте конечную точку вашего веб-сервиса, чтобы я смог протестировать его.
UPD:
Я смог воспроизвести вашу проблему и протестировал парсинг сертификата с моей пропатченной библиотекой as3crypto (она все еще позволяет углубиться в парсинг), я также протестировал парсинг того же сертификата, но загруженного с помощью браузера - в обоих случаях одинаковый результат (так как на вашем скриншоте), поэтому вывод таков: TLSSocket загружает правильные и полные байты сертификата, но не может его проанализировать. Я попытался исправить синтаксический анализ, но это требует более глубокого погружения в реализацию формата as3crypto DER. Поэтому я боюсь, что единственный способ использовать as3httpclient - это исправить разбор DER.
Кстати, почему не стандарт URLLoader
подходит тебе?
Файл as3crypto.swc здесь: http://www.igniterealtime.org/downloads/download-landing.jsp?file=xiff/xiff_3_1_0.zip решил мою проблему.
После распаковки as3crypto.swc находится внутри папки libs.