Доброе утро,
Получили SDK для iOS (SDK_KNCA_2014-08-18).
Открыли проект в Xcode. Проект сразу не компилируется, пришлось повозиться с настройкой библиотеки
OpenSSL. (В оригинальном проекте в настройках указан путь к папке
include, которая должна содержать header файлы openSSL, путь в свою очередь ведет на внешний путь общей папки
SDK_KNCA_2014-08-18 ). Тут возникает к Вам просьба, добавьте пожалуйста папку
include в директорию проекта с содержанием файлов OpenSSL, чтобы другие разработчики в будущем не сталкивались с этой проблемой.
Пришлось скачать последнюю версию OpenSSL (версия на текущий момент OpenSSL 1.0.1h 5 Jun 2014), закинуть файлы в папку include, настроить путь к этой папке в проекте.
take.ms/Fl2Va
Также нужно было создать вручную папку lib в директории проекта, и закинуть туда предоставленные вами библиотеки:
take.ms/UlroT
В настройках проекта указать:
take.ms/5lyfb
В итоге проект запустился.
Закинул все тестовые сертификаты (те что лежат в папке
SDK_KNCA_2014-08-18 ▸ examples ▸ ios ▸ ssltestproject ▸ Documents) в папку Documents симулятора (
Macintosh HD ▸ Users ▸ almasadilbek ▸ Library ▸ Application Support ▸ iPhone Simulator ▸ 7.1 ▸ Applications ▸ 49ABD025-F090-401A-9D05-1965BAA3915E ▸ Documents)
monosnap.com/image/4y9vRbulNit3FWzQ8PuXdzlFki6JWQ, перезапустил проект, попробовал создать подпись перейдя в раздел
Genegate sign. Подписать получилось, это обрадовало.
Если посмотреть в код, там видно что по умолчанию (hard coded) указан сертификат
client_gost.p12, которым производится подпись. Теперь все же надо было проверить как проходит подпись используя мой ЭЦП файл который я получил в цоне. В цоне мы получили два файла, это
RSA_ и
AUTH_RSA_, конечно же мы должны использовать RSA_ для подписи. В коде я указал путь на мой сертификат, указал пароль и запустил проект. Перешел в раздел
Generate sign, нажал на кнопку
Generate Signature и тут ошибка, приложение вылетает, ошибка в коде указывает на строку:
take.ms/GqQ5Q
Логи проекта говорят о том что мой сертификат был успешно открыт и запарсен:
2014-09-05 10:09:53.563 SSLTESTER[4799:70b] read ok
2014-09-05 10:09:53.568 SSLTESTER[4799:70b] parse ok
2014-09-05 10:09:53.569 SSLTESTER[4799:70b] PKCS12 has been loaded
2014-09-05 10:09:53.569 SSLTESTER[4799:70b] /serialNumber=IIN745896....
И тут я понимаю что код настроен так чтобы можно было делать подпись только гостовым сертификатом. Или я ошибаюсь?
Я попробовал поменять тип digest в коде:
const EVP_MD *md = EVP_get_digestbynid(NID_id_GostR3411_94);
на
const EVP_MD *md = EVP_get_digestbynid(NID_sha1); // также перепробовал варианты NID_sha1WithRSA, NID_sha1WithRSAEncryption итп
безуспешно! Получаю ту же ошибку...
Подскажите, как же все таки использовать не гостовый сертификат чтобы подписать данные?
Спасибо.