Я пытаюсь изменить реализацию веб-сервиса, которую я переделал, чтобы использовать HTTPS.
Я использую as3httpclientlib
(https://code.google.com/p/as3httpclientlib/ а>).
Когда я использую конечную точку без SSL, она работает, как и ожидалось.
Однако, когда я использую конечную точку SSL и версию 1.3 as3crypt со страницы загрузок (https://code.google.com/p/as3crypto/downloads/list) или включенный as3crypto-1
я получаю следующее:
patched.swcI 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.
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"));