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

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.
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

Веб-служба, к которой я пытаюсь получить доступ, находится на azurewebsites, поэтому я буду использовать сертификат *.azurewebsites.net.

Я также использую компилятор ASC2, это вызвало несколько ошибок, которые я пришлось исправить в криптопроекте, включая изменение if (hex.length&1==1) hex="0"+hex; на if ((hex.length&1)==1) hex="0"+hex;, которое я нашел размещенным здесь синтаксическая ошибка com.hurlant.util.hex в air sdk 3.5

Я начинаю думать, что это может быть связано с тем, как SSL выполняется на веб-сайтах Azure, поскольку, когда я полностью удаляю запрос, я все равно получаю ту же ошибку, однако указывая на https://www.google.com, ошибки нет.

Они заявляют на своем сайте:

HTTPS не всегда работает. В библиотеке as3crypto есть несколько незначительных ошибок, например, https в доменах, принадлежащих yahoo и yahoo (например, delicious), в настоящее время не работают.

Я просмотрел список проблем для 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"));

person Tom    schedule 09.09.2013    source источник


Ответы (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)) :)

Если у вас все еще есть проблемы, укажите конечную точку вашего веб-сервиса, чтобы я мог его протестировать.

УПД:

Я смог воспроизвести вашу проблему и протестировал синтаксический анализ сертификата с моей исправленной библиотекой as3crypto (она по-прежнему позволяет углубляться в синтаксический анализ), я также протестировал синтаксический анализ того же сертификата, но загруженного с помощью браузера - тот же результат в обоих случаях (как на вашем снимке экрана), поэтому вывод состоит в том, что TLSSocket загружает правильные и полные байты сертификата, но не может его проанализировать. Я попытался исправить синтаксический анализ, но это требует более глубокого изучения реализации формата as3crypto DER. Поэтому я боюсь, что единственный способ использовать as3httpclient — это исправить синтаксический анализ DER.

Кстати, почему стандартный URLLoader вам не подходит?

person fsbmain    schedule 12.09.2013
comment
К сожалению, мне все еще не повезло, ваша пропатченная версия не работала, а SecureSocket не поддерживается на iOS. Обновил мой вопрос конечной точкой :) - person Tom; 13.09.2013
comment
Я использую спокойный веб-сервис, поэтому мне нужно иметь возможность использовать удаление и размещение, а также получение и публикацию. Я думаю, что у меня все получилось, я реализовал следующее: code .google.com/p/as3crypto/issues/detail?id=54&q=der. Ура в любом случае, наградит вас наградой за вашу помощь :) - person Tom; 17.09.2013
comment
Спасибо ) И за ссылку на 54 выпуск спасибо, пропустил. А как насчет REST, не думаете ли вы добавить дополнительный параметр для типа запроса (опубликовать, удалить или поставить), это конечно не красиво, но вполне общее решение для создания клиентов RESFTull на as3 с использованием собственного URLLoader, который более стабилен, чем as3client+ акрипто. - person fsbmain; 17.09.2013
comment
Посмотрю :) Один из других сценариев — использование API-интерфейса хранилища BLOB-объектов Azure: msdn.microsoft.com/en-us/library/windowsazure/dd179451.aspx поднимет еще один вопрос о том, поддерживают ли они это - person Tom; 17.09.2013

Файл as3crypto.swc здесь: http://www.igniterealtime.org/downloads/download-landing.jsp?file=xiff/xiff_3_1_0.zip решил мою проблему.

as3crypto.swc находится внутри папки libs после распаковки.

person user1764381    schedule 18.11.2013
comment
@PranavKapoor웃: Как он может? Это загружаемый файл. - person Nizam; 18.11.2013
comment
@Nizam: Ах, извини, мой плохой. Спасибо, что заметили, удалили комментарий :) - person Pranav 웃; 18.11.2013