Как установить криптопро на телефон

вопросы

Из нашей статьи вы узнаете:

КриптоПро — это крупнейший отечественный разработчик криптографических утилит и программ для работы с электронной подписью. Компания выпускает продукты, которые работают с популярными ОС, такими как: Windows, macOS, Linux, iOS и Android. Это позволяет использовать их не только на персональных компьютерах, но и на мобильных устройствах. Одной из таких программ является средство для криптографической защиты информации (СКЗИ) КриптоПро CSP. Утилита формирует и проверяет электронную подпись. Шифрует информацию для обеспечения конфиденциальности и целостности. Использует протоколы TLS и IPsec для защиты данных в интернет-сети.

В статье расскажем, какие версии СКЗИ КриптоПро CSP выпускаются для операционной системы Андроид.

КриптоПро Android не является привычной для пользователя программой, которую используют для настольной операционной системы. Данная утилита представлена в виде фреймворка. Программная платформа предназначена для разработчиков и встраивается в мобильное приложение или его функционал.

КриптоПро CSP 5.0 для Google Android выполняет следующие функции

  • работает с электронной подписью;
  • создаёт безопасную интернет-связь;
  • используется для разработки браузеров, которые создают и проверяют ЭП на веб-страницах.

CryptoPro Android взаимодействует с российскими криптографическими алгоритмами, работает на основе виртуальной машины Java 2 Runtime Environment v. 1.7 и 1.8. Более подробное описание функционала, примеры приложений и дополнительная информация представлена в руководстве разработчика компании КриптоПро.

Скачать zip-файл КриптоПро CSP 5.0 для Google Android можно на сайте разработчика, где перед загрузкой требуется регистрация. Или для экономии времени воспользоваться нашей ссылкой.

myDSS 2.0 — это мобильное приложение следующего поколения1 для iOS и Android, позволяющее работать с основными функциями КриптоПро DSS (подпись, управление сертификатами) непосредственно при помощи мобильного телефона.

myDSS 2.0 предназначен для создания как квалифицированной, так и неквалифицированной электронной подписи документов и для аутентификации пользователей в корпоративных системах, системах ДБО, торговых площадках и порталах государственных услуг2.

Что нового

Помимо подтверждения операций подписи, аутентификации и др., мобильное приложение myDSS 2.0 предоставляет следующие возможности3:

  • регистрация пользователя (несколько вариантов с однократной личной идентификацией);
  • управление сертификатами пользователя непосредственно в мобильном приложении;
  • создание и хранение ключей ЭП пользователей в мобильном приложении (мобильная подпись) или на стороне сервера (дистанционная («облачная») подпись);
  • подпись документов, отправленных как с сервера, так и из хранилища мобильного телефона;
  • подпись и визуализация нескольких документов в одной операции;
  • подпись конфиденциальных документов;
  • возможность работы с нескольких мобильных устройств (смартфонов, планшетов) даже вне действия сети;
  • все функции myDSS 2.0 могут быть интегрированы в другое приложение благодаря наличию исполнения для встраивания — myDSS SDK.

Внимание!
Для проверки возможности перехода с myDSS на myDSS 2.0 необходимо обратиться в организацию, предоставившую Вам учетную запись.

Безопасность

  • Пользователь подтверждает операцию, только убедившись, что содержание подписываемого документа соответствует информации, отображаемой в мобильном приложении.
  • Ключи электронной подписи пользователей в режиме мобильной подписи хранятся в сертифицированном (класс КС1) КриптоПро CSP 5.0 R2 в неизвлекаемом виде4.
  • Канал связи между myDSS 2.0 и КриптоПро DSS защищен TLS-соединением с использованием российских криптографических алгоритмов (TLS с ГОСТ), что позволяет подписывать конфиденциальные документы.
  • Ключи электронной подписи пользователей в режиме дистанционной («облачной») подписи хранятся в сертифицированном (класс КВ2) КриптоПро HSM 2.0 в неизвлекаемом виде.
  • Ключи аутентификации пользователей, используемые для подтверждения операции, хранятся в myDSS 2.0 в защищенном виде.

Юридическая значимость подписи

Использование КриптоПро DSS совместно с приложением myDSS 2.0 позволяет подписывать документы квалифицированной электронной подписью в режиме мобильной подписи (с хранением ключей на устройстве пользователя).

Создание электронной подписи документа обеспечивает неотказуемость действий. Пользователь не только подтверждает содержание документа, но и в дальнейшем не имеет возможности отказаться от совершенного действия.

Загрузка myDSS 2.0

Для загрузки приложения отсканируйте QR-код или перейдите по одной из ссылок ниже.

1 По сравнению с мобильным приложением myDSS.
2 С учетом ограничений, описанных на странице о КриптоПро DSS.
3 Мобильные приложения DSS Client и myDSS 2.0 предоставляют аналогичные функции. myDSS 2.0 является совместной разработкой компаний КриптоПро и SafeTech.
4 Перечень поддерживаемых ключевых носителей уточняется.

  • Страница для печатиСтраница для печати

Защищаем мобильное приложение с помощью «КриптоПро»: пошаговая инструкция

Статья описывает работу с одним из крупнейших российских поставщиков средств криптографической защиты информации и электронной цифровой подписи — компанией «КриптоПро», занимающей лидирующие позиции в России. Рассмотрено импортирование фреймворка для iOS и подводные камни при импортировании, его использование для создания и проверки электронных цифровых подписей, а также авторизации с использованием приватного ключа.

Работа с «КриптоПро»

Сразу хотелось бы сказать, что осуществление такого уровня защиты и функционала в мобильных приложениях в принципе не может быть столь же простым, как сверстать страницу или отправить запрос на сервер. Читать и изучать придется в любом случае, особенно если вы никогда прежде не работали с криптографией и безопасным соединением через TLS.

Компания «КриптоПро» предоставляет мобильным разработчикам мощный инструмент для внедрения в свое приложение такого сложного функционала совершенно бесплатно, но есть и ложка дегтя. К сожалению, за долгое время существования компании не было сделано удобной и понятной документации. Отдельно для мобильных разработчиков ее нет в принципе.

Разработка рано или поздно приведет вас на форум, и вам придется его перелопатить, чтобы найти ответ. Наибольшую сложность составляет отсутствие информации о том, что и как делать, — это мы и постараемся исправить в нашей статье. Все ссылки на ресурсы, которые могут быть полезными, будут оставлены в конце статьи.

Также придется поработать с С++ и самостоятельно заботиться о выделении и очистке памяти.
Стоит отметить, что статья написана при актуальной версии «КриптоПро CSP 4.0», поэтому описанные ниже пакеты для разработчиков в будущем могут отличаться.

Импорт «КриптоПро» в мобильное приложение

Первый шаг для использования «КриптоПро» в своем приложении — это внедрить фреймворк, скачанный с сайта компании. В пакете для iOS помимо самого фреймворка содержатся также три примера — создание электронной подписи (ЭЦП), создание ssl-тоннеля и пример, позволяющий собрать браузер, обладающий функциональностью создания и проверки ЭЦП на веб-страницах. Подробное описание содержится внутри примеров, в файлах Readme. На их основе легче понять алгоритм действий. Очень поможет пакет для MacOS: в нем содержится много полезных примеров с подробными комментариями. После его установки все примеры будут находиться на диске в разделе opt/cprocsp/src/doxygen/CSP.

Инструкция по импортированию самого фреймворка находится в CPROCSP.framework в файле ReadMe, разберем его по пунктам.

1. От вас требуется зайти в консоль и прописать путь к скаченному фреймворку, далее запустить утилиту, как описано ниже:

cd /Users/agima/КриптоПро/ios-uni/CPROCSP.framework/
./ SetApplicationLicense 40400-W0037-EKVQK-9YDNG-D3F67 license.enc

(указанный ключ прилагается в файле, затем в этой же директории будет создан файл лицензии license.enc).

2. Прежде чем импортировать фреймворк, советуем перенести его файл CPROCSP.framework в папку с проектом. Так вы защитите себя от случайного переноса фреймворка в другую папку, из-за чего «слетят» пути в Xсode.
Теперь к импорту: открываем Xсode, в боковой панели слева выбираем проект и в списке targets выбираем цель сборки

Далее во вкладке Build Phases выбираем Link Binary With Libraries, жмем на «+» и затем Add other, чтобы указать путь к фреймворку вручную. Находим его и выбираем Open. Фреймворк импортирован, но использовать его еще не получится.

3. Создаем в проекте папку Resources, открываем файл CPROCSP.framework, заходим в папку Resources и перетаскиваем все файлы и папки, кроме локализации (ru.lroj и en.lproj), в созданную нами папку с такими настройками:

4. Перетаскиваем в эту же папку файл лицензии, созданный в первом пункте, с настройками как на скриншоте выше.

5. Теперь переносим оставшиеся папки локализации также в Resources приложения, но с другими настройками:

Если все сделать правильно, то папки будут выглядеть так:

6. Следующим пунктом идет настройка проекта для отладки в эмуляторе. Если этого не сделать, то приложение можно будет запустить только на устройстве. Во вкладке Build Settings проекта в поле Valid Architectures оставляем только armv7. Работы по поддержке 64-битной архитектуры уже ведутся, но пока используем 32-битную. Также в Architectures записываем Optimized (armv7). Должно получиться следующее:

На этом приложенная инструкция заканчивается, но запустить приложение в итоге не получится — при компиляции вы увидите что-то вроде этого:

Непонятно, по каким причинам разработчики не дописали пару пунктов, но для корректной линковки необходимо добавить еще некоторые библиотеки и «магический флаг». Теперь подробнее.

Аналогично схеме, описанной в пункте 2, добираемся до файла CPROCSP.framework, в нем заходим в папку reader и импортируем запылившуюся там библиотеку librdrpcsc_empty.o. Следующую библиотеку добавляем из заложенных в Xcode, для этого все в том же окне в поиске вводим libz

и добавляем ее кнопкой Add.

Но этого тоже будет недостаточно, останется еще одна ошибка:

Для ее решения в любое место проекта поместите флаг

extern bool USE_CACHE_DIR;
bool USE_CACHE_DIR = false; 

После этого проблема будет решена и приложение соберется успешно. Данный флаг говорит о том, где вы хотите хранить папку с ключами. В случае с false (как использовали мы, — причина будет раскрыта далее) используется папка

/private/var/root/Documents/cprocsp/keys 

Если поставить true, то они будут храниться в закрытом месте:

/private/var/root/Library/Caches/cprocsp/keys/

На этом импорт фреймворка окончен, и можно запустить приложение на эмуляторе.

Контейнер закрытого ключа для работы с «КриптоПро»

На момент написания статьи «КриптоПро CSP 4.0» не поддерживает работу с сертификатами *.pfx, которые содержат и публичный, и приватный ключ. Необходимо использовать контейнеры *.000, которые можно получить только при использовании «КриптоПро»; их формат нигде не описан, и записываются они, как правило, на ключевых носителях, токенах (флешках, дискетах). В проводнике они выглядят как папки, которые содержат в себе один ключ, разбитый на файлы header.key, masks.key, name.key и primary.key.

Также у компании есть тестовый удостоверяющий центр (УЦ), на котором можно сформировать ключи и получить сертификат УЦ. Здесь необходимо дополнить, что для корректной работы страницы оформления запроса сертификата необходимо использовать Internet Explorer (или любой другой браузер с установленным плагином, который можно скачать в тестовом УЦ), и на компьютере должно быть установлено CSP, иначе на странице оформления заявки на получение сертификата будут недоступны необходимые алгоритмы хеширования ГОСТ Р 34.10-2012.

Установка контейнера закрытого ключа в приложение

Как пишут сами сотрудники «КриптоПро», есть три варианта установки контейнера на устройство:

• Через iTunes File Sharing.
• Использовать отдельное приложение для записи файлов на iOS, типа iExplorer.
• Написать собственный экспорт ключа в блоб (PRIVATEKEYBLOB) и импортировать его в коде приложения. Пример такого способа находится в вышеупомянутом пакете для MacOS под названием EncryptKey/DecryptKey.

Мы использовали первый вариант — как самый быстрый и удовлетворяющий требованиям заказчика. Именно для его реализации при импорте был выбран флаг USE_CACHE_DIR = false; если iTunes File Sharing вами использоваться не будет или вы хотите скрыть от пользователя возможность заглянуть в папку с ключами, то лучше скройте ее, выставив флаг true.
После первого запуска с установленным фреймворком в папке Documents приложения будет создана папка cprocsp:

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

Далее существует два пути: написать все функции самому или использовать уже готовый контроллер, и так как его хватит для решения большинства задач, о нем и поговорим.
Фреймворк содержит в себе хедер-файл с названием PaneViewController.h. Если вы не обременены строгостью по дизайну, то можете импортировать предложенные xib-файлы (находятся в CPROCSP.framework/Resources) и инициализировать криптопанель через них — к примеру, таким образом:

<code>#import “CPROCSP/PaneViewControler.h”
…

PaneViewController *CPROPane;
    
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        CPROPane = [[PaneViewController alloc] initWithNibName:@"PaneViewController" bundle:nil];
    else
        CPROPane = [[PaneViewController alloc] initWithNibName:@"PaneViewControllerIPhone" bundle: nil];
    
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:CPROPane];
    [navController setModalPresentationStyle:UIModalPresentationFullScreen];
    
    [self presentViewController:navController animated:true completion:nil];</code>

Но так как все xib-файлы являются обычными UIView с таблицей, вы легко можете кастомизировать их под свой дизайн.

После открытия панели первое, что необходимо сделать, — это перейти во вкладку «Взаимодействие с УЦ», установить сертификат УЦ (корневой сертификат удостоверяющего центра), пройти процедуру регистрации, отправить запрос на сертификат и получить (установить) его.

После установки корневого сертификата УЦ в папке cprocsp/keys должна будет появиться папка mobile. В нее помещаются контейнеры *.000. Чтобы их установить, снова заходим в панель «КриптоПро» и на главном экране выбираем «Установить сертификаты и контейнеры». Контейнеры, содержащиеся в папке cprocsp/keys/mobile должны быть от криптопровайдера «КриптоПро» (если хотя бы один таковым не является или поврежден, то функция вернет ошибку, не установив ни один из них).
На этом установка завершена.

Подпись и проверка подписи приватным ключом

После установки корневого сертификата УЦ и контейнера можно приступать к подписи документов. Функции создания и проверки подписи можно найти в вышеупомянутом пакете для MacOS под названием CryptMsgSign. В них содержатся комментарии по каждой используемой функции. Аналогичные примеры находятся в пакете для iOS, в CreateFile/Classes/SignFie.cpp. Здесь в отличие от предыдущей реализации подписи на вход подается путь к файлу, который необходимо подписать. По причине большого количества функций разбирать каждую в отдельности мы не будем. Рассмотрим отдельные моменты, которые не так очевидны.

Функция подписи начинается с открытия хранилища сертификатов при помощи
CertOpenSystemStore:

<code>hCertStore = CertOpenSystemStore(0, "My");
	if(!hCertStore) {
		ret = CSP_GetLastError();
		fprintf (stderr, "CertOpenSystemStore failed.");
}</code>

Здесь подразумевается не ключевое хранилище устройства, а хранилище, содержащееся в приложении в папке cprocsp/users/mobile/stores. Функция работает так, что если такого хранилища не будет найдено, она его создаст, поэтому вам об этом можно не заботиться. При использовании панели PaneViewController будет создано и использовано хранилище MY.sto.
После получения указателя на сертификат, выделения из него приватного ключа и прочих инициализаций процедура подписи начинается с функции CryptMsgOpenToEncode, которая открывает сообщение для кодирования и возвращает дескриптор открытого сообщения:

if(hMsg = CryptMsgOpenToEncode(TYPE_DER,        		// Encoding type
						0,                        		// Flags
						CMSG_SIGNED,           // Message type
						&SignedMsgEncodeInfo,    // Pointer to structure
						NULL,                    // Inner content object ID
						NULL))                   // Stream information (not used)
    {
		printf("The message to be encoded has been opened. n");
    } else {
		ret = CSP_GetLastError();
		fprintf (stderr, "OpenToEncode failed");
    }
…

if(hMsg)
     CryptMsgClose(hMsg);</code>

Сообщение остается открытым до вызова CryptMsgClose. Здесь стоит обратить внимание на используемые флаг (второй параметр): если выставить 0, как в примере, то подпись будет присоединенная (attached); для получения отсоединенной (detached) подписи необходимо выставить флаг CMSG_DETACHED_FLAG. После этого подписываемые данные помещаются в сообщение и полученный блоб можно вывести в отдельный файл.

Проверка подписи аналогична ее созданию за небольшим исключением. Вначале открывается сообщение для декодирования, далее вытаскивается сертификат, приложенный к подписи. Открывается хранилище и осуществляется поиск приложенного сертификата. После того как был найден сертификат, проводится проверка подписи функцией CryptMsgControl, которая возвращает true в случае успешной верификации и false, если возникли ошибки:

if(CryptMsgControl(hMsg,                       // Handle to the message
			   0,                          // Flags
			   CMSG_CTRL_VERIFY_SIGNATURE, // Control type
			   pSignerCertificateInfo))    // Pointer to the CERT_INFO
    {
		printf("nSignature was VERIFIED.n");
    } else {
		printf("nThe signature was NOT VERIFIED.n");
		ret = CSP_GetLastError();
    }</code>

Функция CSP_GetLastError() возвращает код ошибки и краткое описание.

Авторизация при помощи приватного ключа

Для авторизации с использованием приватного ключа нам понадобится сам ключ, установленный вышеописанным образом, установленный корневой сертификат УЦ, настроенный сервер с «КриптоПро» и с добавленным в доверенные нашим ключом. Сервер должен поддерживать работу по TLS версии 1.2 для всех устройств с iOS 9 и выше, а также иметь ГОСТовые cipher suites от «КриптоПро».

Для подключения к серверу мы создали отдельный менеджер и переписали для его NSURLSessionDataTask функцию resume. Так как в нашем приложении есть возможность авторизоваться как по http, так и по https, мы переключались между двумя менеджерами, отвечающими за разное подключение. Создание отдельного менеджера необходимо для того, чтобы использовать cipher suites от «КриптоПро». Если во время хендшейка в Client Hello вы их не положите, то когда с вами «поздоровается» сервер, TLS-соединение будет провалено, так как будет выбран неверный cipher suite.

Для выявления причин ошибок и получения подробной информации по подключению может пригодиться такая программа, как WireShark. В ней есть возможность посмотреть все этапы TLS-соединения и достаточно информации для анализа. Также в ней вы можете посмотреть, какие cipher suites отправляете и какие поддерживает сервер.

В качестве менеджера, который будет отправлять нужные cipher suites, используется UrlRetriever, входящий в состав фреймворка. Открыв хедер, вы увидите множество понятных функций для отправки запроса, но не сразу очевидно, как и чем пользоваться, тем более что документации по этому вы не найдете ни на сайте, ни на форуме. И в самом файле также нет никаких комментариев, за исключением одной //TODO, которые оставили разработчики :)
Внутрь класса заглянуть не удастся, поэтому нам все приходилось испытывать вручную и смотреть, что как работает.

Для начала создадим сам ретривер, так как для каждого запроса нам необходимо будет очищать в нем информацию. Вначале функции resume создадим экземпляр класса:

#import <CPROCSP/CPROCSP.h>
#import <CPROCSP/UrlRetriever.h>

UrlRetriever *retriever = new UrlRetriever();

И зададим настройки безопасности:

retriever->set_verify_host(true);
retriever->set_verify_server(true);</code>

После этого запишем хедеры. Так как они уже содержатся в нашем NSUrlRequest, возьмем их оттуда и преобразуем в нужный для ретривера вид:


__block UrlHeaders headers;

[self.request.allHTTPHeaderFields enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {
        NSString *result = [NSString stringWithFormat:@"%@: %@", key, obj];
        std::string *string = new std::string([result cStringUsingEncoding:[NSString defaultCStringEncoding]]);
        
        headers.push_back(*string);
    }];

retriever->set_headers(headers);

Теперь записываем сам запрос:

BYTE *requestBytes = (BYTE *)[self.request.HTTPBody bytes];
retriever->set_postmessage(requestBytes, self.request.HTTPBody.length);</code>

В случае если мы авторизуемся без сертификата, то уже можно отсылать запрос:

retriever->retrieve_url([self.request.URL.absoluteString cStringUsingEncoding:[NSString defaultCStringEncoding]]);
</code>

И вернуть ответ в completion-блок:

NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.request.URL statusCode:retriever->get_code() HTTPVersion:@"HTTP/1.1" headerFields:self.request.allHTTPHeaderFields];

self.requestCompletion(response, [NSData dataWithBytes:retriever->get_data() length:retriever->get_data_len()], nil);
</code>

А в случае ошибки вернуть error:

self.requestCompletion(response, [[NSData alloc] init], [[NSError alloc] initWithDomain:NSURLErrorDomain code:retriever->get_error() userInfo:nil]);</code>

Данный сценарий аналогичен и для авторизации по сертификату, только перед отправкой запроса в ретривер необходимо записать отпечаток сертификата (thumbprint). Существует множество вариантов получения отпечатка — мы покажем самый правильный (на наш взгляд).
Из примеров для подписи возьмем реализацию некоторых функций, таких как CertOpenStore, для открытия хранилища и CertEnumCertificatesInStore — для получения дескриптора сертификата PCCERT_CONTEXT. После этого пишем функцию для получения отпечатка в NSSting:

- (NSString *)getCertificateHashFromCert:(PCCERT_CONTEXT)certContext {
    
    BYTE *pvData = NULL;
    DWORD cbSize = 0;
    DWORD cbHash = 0;
    
    if(!CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, NULL, &cbSize))
        NSLog(@"CertGetCertificateContextProperty error %u", CSP_GetLastError());
    if (pvData) {
        free(pvData);
    }

    pvData = malloc(cbSize);
    cbHash = cbSize;

    if(!CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, pvData, &cbSize))
        NSLog(@"CertGetCertificateContextProperty error %u", CSP_GetLastError());
    
    DWORD dest;
    if (!CryptBinaryToString(pvData, cbHash, 0, NULL, &dest))
        NSLog(@"CryptBinaryToString error: %u", CSP_GetLastError());
    
    LPWSTR buf = malloc(dest * sizeof(TCHAR));
    
    if (!CryptBinaryToString(pvData, cbHash, 0, buf, &dest))
        NSLog(@"CryptBinaryToString error: %u", CSP_GetLastError());
    
    return [[NSString alloc] initWithData:[NSData dataWithBytes:buf length:dest] encoding:[NSString defaultCStringEncoding]];
}
</code>

Первой используется функция CertGetCertificateContextProperty c параметром CERT_SHA1_HASH_PROP_ID, который говорит функции о параметре, который необходимо получить из сертификата, в данном случае — SHA1 hash. Функция вызывается два раза, первый без подстановки буфера, вместо него ставится NULL. Это делается для получения требуемого размера памяти, которую нужно выделить под буфер. Во втором использовании подставляется буфер теперь уже известного размера. Чтобы преобразовать полученные данные из массива байт в строку, используется функция CryptBinaryToString — тоже два раза (по тем же причинам). После этого вы получите красивое содержимое вида:

—----BEGIN CERTIFICATE-----
Хэш
—---- END CERTIFICATE-----</code>

Но для ретривера нужен другой формат. Для получения необходимого отпечатка в CryptBinaryToString во флаги (третий параметр) требуется записать флаг CRYPT_STRING_HEX. Полученная в результате строка и будет являться отпечатком, который далее ставится в ретривер:

retriever->set_client_cert([thumbPrint cStringUsingEncoding:[NSString defaultCStringEncoding]]);</code>

Если все сделано правильно, соединение будет успешно установлено с использованием ГОСТа алгоритмов шифрования.

Полезные ссылки

MSDN — подробное описание всех функций, входящих в них параметров, а также рабочие примеры.

Форум — форум «КриптоПро», на котором сотрудники ежедневно отвечают на вопросы. Многие ответы на вопросы уже даны, и, несмотря на их давность (порою около 6 лет), они все еще могут вам помочь.

Руководство разработчика — написанное компанией руководство, которое содержит в себе перечень входящих в состав криптопровайдера функций с кратким описанием и примерами.

Описание ошибок — большой список возможных ошибок, возникающих в функциях С++, с их кодом и кратких описанием. Чтобы получить код ошибки, используйте в коде приложения функцию CSP_GetLastError, входящей в состав фреймворка. Она хранит в себе код последней полученной ошибки.

Работа с «КриптоПро»

Сразу хотелось бы сказать, что осуществление такого уровня защиты и функционала в мобильных приложениях в принципе не может быть столь же простым, как сверстать страницу или отправить запрос на сервер. Читать и изучать придется в любом случае, особенно если вы никогда прежде не работали с криптографией и безопасным соединением через TLS.

Компания «КриптоПро» предоставляет мобильным разработчикам мощный инструмент для внедрения в свое приложение такого сложного функционала совершенно бесплатно, но есть и ложка дегтя. К сожалению, за долгое время существования компании не было сделано удобной и понятной документации. Отдельно для мобильных разработчиков ее нет в принципе.

Разработка рано или поздно приведет вас на форум, и вам придется его перелопатить, чтобы найти ответ. Наибольшую сложность составляет отсутствие информации о том, что и как делать, — это мы и постараемся исправить в нашей статье. Все ссылки на ресурсы, которые могут быть полезными, будут оставлены в конце статьи.

Также придется поработать с С++ и самостоятельно заботиться о выделении и очистке памяти. Стоит отметить, что статья написана при актуальной версии «КриптоПро CSP 4.0», поэтому описанные ниже пакеты для разработчиков в будущем могут отличаться.

Импорт «КриптоПро» в мобильное приложение

Первый шаг для использования «КриптоПро» в своем приложении — это внедрить фреймворк, скачанный с сайта компании. В пакете для iOS помимо самого фреймворка содержатся также три примера — создание электронной подписи (ЭЦП), создание ssl-тоннеля и пример, позволяющий собрать браузер, обладающий функциональностью создания и проверки ЭЦП на веб-страницах. Подробное описание содержится внутри примеров, в файлах Readme. На их основе легче понять алгоритм действий. Очень поможет пакет для MacOS: в нем содержится много полезных примеров с подробными комментариями. После его установки все примеры будут находиться на диске в разделе opt/cprocsp/src/doxygen/CSP.

Инструкция по импортированию самого фреймворка находится в CPROCSP.framework в файле ReadMe, разберем его по пунктам.

1. От вас требуется зайти в консоль и прописать путь к скаченному фреймворку, далее запустить утилиту, как описано ниже:

cd /Users/agima/КриптоПро/ios-uni/CPROCSP.framework/

./ SetApplicationLicense 40400-W0037-EKVQK-9YDNG-D3F67 license.enc

(указанный ключ прилагается в файле, затем в этой же директории будет создан файл лицензии license.enc).

2. Прежде чем импортировать фреймворк, советуем перенести его файл CPROCSP.framework в папку с проектом. Так вы защитите себя от случайного переноса фреймворка в другую папку, из-за чего «слетят» пути в Xсode.

Теперь к импорту: открываем Xсode, в боковой панели слева выбираем проект и в списке targets выбираем цель сборки

tabl.png

Далее во вкладке Build Phases выбираем Link Binary With Libraries, жмем на «+» и затем Add other, чтобы указать путь к фреймворку вручную. Находим его и выбираем Open. Фреймворк импортирован, но использовать его еще не получится.

tabl.png

3. Создаем в проекте папку Resources, открываем файл CPROCSP.framework, заходим в папку Resources и перетаскиваем все файлы и папки, кроме локализации (ru.lroj и en.lproj), в созданную нами папку с такими настройками:

tabl.png

4. Перетаскиваем в эту же папку файл лицензии, созданный в первом пункте, с настройками как на скриншоте выше.

5. Теперь переносим оставшиеся папки локализации также в Resources приложения, но с другими настройками:

tabl.png

Если все сделать правильно, то папки будут выглядеть так:

tabl.png

6. Следующим пунктом идет настройка проекта для отладки в эмуляторе. Если этого не сделать, то приложение можно будет запустить только на устройстве. Во вкладке Build Settings проекта в поле Valid Architectures оставляем только armv7. Работы по поддержке 64-битной архитектуры уже ведутся, но пока используем 32-битную. Также в Architectures записываем Optimized (armv7). Должно получиться следующее:

tabl.png

На этом приложенная инструкция заканчивается, но запустить приложение в итоге не получится — при компиляции вы увидите что-то вроде этого:

tabl.png

Непонятно, по каким причинам разработчики не дописали пару пунктов, но для корректной линковки необходимо добавить еще некоторые библиотеки и «магический флаг». Теперь подробнее.

Аналогично схеме, описанной в пункте 2, добираемся до файла CPROCSP.framework, в нем заходим в папку reader и импортируем запылившуюся там библиотеку librdrpcsc_empty.o. Следующую библиотеку добавляем из заложенных в Xcode, для этого все в том же окне в поиске вводим libz

tabl.png

и добавляем ее кнопкой Add.

Но этого тоже будет недостаточно, останется еще одна ошибка.

Для ее решения в любое место проекта поместите флаг

extern bool USE_CACHE_DIR;

bool USE_CACHE_DIR = false;

После этого проблема будет решена и приложение соберется успешно. Данный флаг говорит о том, где вы хотите хранить папку с ключами. В случае с false (как использовали мы, — причина будет раскрыта далее) используется папка

/private/var/root/Documents/cprocsp/keys 

Если поставить true, то они будут храниться в закрытом месте:

/private/var/root/Library/Caches/cprocsp/keys/

На этом импорт фреймворка окончен, и можно запустить приложение на эмуляторе.

Контейнер закрытого ключа для работы с «КриптоПро»

На момент написания статьи «КриптоПро CSP 4.0» не поддерживает работу с сертификатами *.pfx, которые содержат и публичный, и приватный ключ. Необходимо использовать контейнеры *.000, которые можно получить только при использовании «КриптоПро»; их формат нигде не описан, и записываются они, как правило, на ключевых носителях, токенах (флешках, дискетах). В проводнике они выглядят как папки, которые содержат в себе один ключ, разбитый на файлы header.key, masks.key, name.key и primary.key.

Также у компании есть тестовый удостоверяющий центр (УЦ), на котором можно сформировать ключи и получить сертификат УЦ. Здесь необходимо дополнить, что для корректной работы страницы оформления запроса сертификата необходимо использовать Internet Explorer (или любой другой браузер с установленным плагином, который можно скачать в тестовом УЦ), и на компьютере должно быть установлено CSP, иначе на странице оформления заявки на получение сертификата будут недоступны необходимые алгоритмы хеширования ГОСТ Р 34.10-2012.

Установка контейнера закрытого ключа в приложение

Как пишут сами сотрудники «КриптоПро», есть три варианта установки контейнера на устройство:

  • Через iTunes File Sharing.
  • Использовать отдельное приложение для записи файлов на iOS, типа iExplorer.
  • Написать собственный экспорт ключа в блоб (PRIVATEKEYBLOB) и импортировать его в коде приложения. Пример такого способа находится в вышеупомянутом пакете для MacOS под названием EncryptKey/DecryptKey.

Мы использовали первый вариант — как самый быстрый и удовлетворяющий требованиям заказчика. Именно для его реализации при импорте был выбран флаг USE_CACHE_DIR = false; если iTunes File Sharing вами использоваться не будет или вы хотите скрыть от пользователя возможность заглянуть в папку с ключами, то лучше скройте ее, выставив флаг true.

После первого запуска с установленным фреймворком в папке Documents приложения будет создана папка cprocsp:

tabl.png

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

Далее существует два пути: написать все функции самому или использовать уже готовый контроллер, и так как его хватит для решения большинства задач, о нем и поговорим. Фреймворк содержит в себе хедер-файл с названием PaneViewController.h. Если вы не обременены строгостью по дизайну, то можете импортировать предложенные xib-файлы (находятся в CPROCSP.framework/Resources) и инициализировать криптопанель через них — к примеру, таким образом:

#import “CPROCSP/PaneViewControler.h”
…

PaneViewController *CPROPane;
    
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        CPROPane = [[PaneViewController alloc] initWithNibName:@"PaneViewController" bundle:nil];
    else
        CPROPane = [[PaneViewController alloc] initWithNibName:@"PaneViewControllerIPhone" bundle: nil];
    
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:CPROPane];
    [navController setModalPresentationStyle:UIModalPresentationFullScreen];
    
    [self presentViewController:navController animated:true completion:nil];

Но так как все xib-файлы являются обычными UIView с таблицей, вы легко можете кастомизировать их под свой дизайн.

tabl.png

После открытия панели первое, что необходимо сделать, — это перейти во вкладку «Взаимодействие с УЦ», установить сертификат УЦ (корневой сертификат удостоверяющего центра), пройти процедуру регистрации, отправить запрос на сертификат и получить (установить) его.

tabl.png

После установки корневого сертификата УЦ в папке cprocsp/keys должна будет появиться папка mobile. В нее помещаются контейнеры *.000. Чтобы их установить, снова заходим в панель «КриптоПро» и на главном экране выбираем «Установить сертификаты и контейнеры». Контейнеры, содержащиеся в папке cprocsp/keys/mobile должны быть от криптопровайдера «КриптоПро» (если хотя бы один таковым не является или поврежден, то функция вернет ошибку, не установив ни один из них). На этом установка завершена.

Подпись и проверка подписи приватным ключом

После установки корневого сертификата УЦ и контейнера можно приступать к подписи документов. Функции создания и проверки подписи можно найти в вышеупомянутом пакете для MacOS под названием CryptMsgSign. В них содержатся комментарии по каждой используемой функции. Аналогичные примеры находятся в пакете для iOS, в CreateFile/Classes/SignFie.cpp. Здесь в отличие от предыдущей реализации подписи на вход подается путь к файлу, который необходимо подписать. По причине большого количества функций разбирать каждую в отдельности мы не будем. Рассмотрим отдельные моменты, которые не так очевидны.

Функция подписи начинается с открытия хранилища сертификатов при помощи CertOpenSystemStore:

hCertStore = CertOpenSystemStore(0, "My");
	if(!hCertStore) {
		ret = CSP_GetLastError();
		fprintf (stderr, "CertOpenSystemStore failed.");
}

Здесь подразумевается не ключевое хранилище устройства, а хранилище, содержащееся в приложении в папке cprocsp/users/mobile/stores. Функция работает так, что если такого хранилища не будет найдено, она его создаст, поэтому вам об этом можно не заботиться. При использовании панели PaneViewController будет создано и использовано хранилище MY.sto. После получения указателя на сертификат, выделения из него приватного ключа и прочих инициализаций процедура подписи начинается с функции CryptMsgOpenToEncode, которая открывает сообщение для кодирования и возвращает дескриптор открытого сообщения:

if(hMsg = CryptMsgOpenToEncode(TYPE_DER,        		// Encoding type
						0,                        		// Flags
						CMSG_SIGNED,           // Message type
						&SignedMsgEncodeInfo,    // Pointer to structure
						NULL,                    // Inner content object ID
						NULL))                   // Stream information (not used)
    {
		printf("The message to be encoded has been opened. n");
    } else {
		ret = CSP_GetLastError();
		fprintf (stderr, "OpenToEncode failed");
    }
…

if(hMsg)
     CryptMsgClose(hMsg);

Сообщение остается открытым до вызова CryptMsgClose. Здесь стоит обратить внимание на используемые флаг (второй параметр): если выставить 0, как в примере, то подпись будет присоединенная (attached); для получения отсоединенной (detached) подписи необходимо выставить флаг CMSG_DETACHED_FLAG. После этого подписываемые данные помещаются в сообщение и полученный блоб можно вывести в отдельный файл.

Проверка подписи аналогична ее созданию за небольшим исключением. Вначале открывается сообщение для декодирования, далее вытаскивается сертификат, приложенный к подписи. Открывается хранилище и осуществляется поиск приложенного сертификата. После того как был найден сертификат, проводится проверка подписи функцией CryptMsgControl, которая возвращает true в случае успешной верификации и false, если возникли ошибки:

if(CryptMsgControl(hMsg,                       // Handle to the message
			   0,                          // Flags
			   CMSG_CTRL_VERIFY_SIGNATURE, // Control type
			   pSignerCertificateInfo))    // Pointer to the CERT_INFO
    {
		printf("nSignature was VERIFIED.n");
    } else {
		printf("nThe signature was NOT VERIFIED.n");
		ret = CSP_GetLastError();
    }

Функция CSP_GetLastError() возвращает код ошибки и краткое описание.

Авторизация при помощи приватного ключа

Для авторизации с использованием приватного ключа нам понадобится сам ключ, установленный вышеописанным образом, установленный корневой сертификат УЦ, настроенный сервер с «КриптоПро» и с добавленным в доверенные нашим ключом. Сервер должен поддерживать работу по TLS версии 1.2 для всех устройств с iOS 9 и выше, а также иметь ГОСТовые cipher suites от «КриптоПро».

Для подключения к серверу мы создали отдельный менеджер и переписали для его NSURLSessionDataTask функцию resume. Так как в нашем приложении есть возможность авторизоваться как по http, так и по https, мы переключались между двумя менеджерами, отвечающими за разное подключение. Создание отдельного менеджера необходимо для того, чтобы использовать cipher suites от «КриптоПро». Если во время хендшейка в Client Hello вы их не положите, то когда с вами «поздоровается» сервер, TLS-соединение будет провалено, так как будет выбран неверный cipher suite.

Для выявления причин ошибок и получения подробной информации по подключению может пригодиться такая программа, как WireShark. В ней есть возможность посмотреть все этапы TLS-соединения и достаточно информации для анализа. Также в ней вы можете посмотреть, какие cipher suites отправляете и какие поддерживает сервер.

В качестве менеджера, который будет отправлять нужные cipher suites, используется UrlRetriever, входящий в состав фреймворка. Открыв хедер, вы увидите множество понятных функций для отправки запроса, но не сразу очевидно, как и чем пользоваться, тем более что документации по этому вы не найдете ни на сайте, ни на форуме. И в самом файле также нет никаких комментариев, за исключением одной //TODO, которые оставили разработчики :)

Внутрь класса заглянуть не удастся, поэтому нам все приходилось испытывать вручную и смотреть, что как работает.

Для начала создадим сам ретривер, так как для каждого запроса нам необходимо будет очищать в нем информацию. Вначале функции resume создадим экземпляр класса:

#import 
#import 


UrlRetriever *retriever = new UrlRetriever();


И зададим настройки безопасности:


retriever->set_verify_host(true);
retriever->set_verify_server(true);

После этого запишем хедеры. Так как они уже содержатся в нашем NSUrlRequest, возьмем их оттуда и преобразуем в нужный для ретривера вид:

__block UrlHeaders headers;

[self.request.allHTTPHeaderFields enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {
        NSString *result = [NSString stringWithFormat:@"%@: %@", key, obj];
        std::string *string = new std::string([result cStringUsingEncoding:[NSString defaultCStringEncoding]]);
        
        headers.push_back(*string);
    }];

retriever->set_headers(headers);

Теперь записываем сам запрос:

BYTE *requestBytes = (BYTE *)[self.request.HTTPBody bytes];
retriever->set_postmessage(requestBytes, self.request.HTTPBody.length);

В случае если мы авторизуемся без сертификата, то уже можно отсылать запрос:

retriever->retrieve_url([self.request.URL.absoluteString cStringUsingEncoding:[NSString defaultCStringEncoding]]);

И вернуть ответ в completion-блок:

NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.request.URL statusCode:retriever->get_code() HTTPVersion:@"HTTP/1.1" headerFields:self.request.allHTTPHeaderFields];

self.requestCompletion(response, [NSData dataWithBytes:retriever->get_data() length:retriever->get_data_len()], nil);

А в случае ошибки вернуть error:

self.requestCompletion(response, [[NSData alloc] init], [[NSError alloc] initWithDomain:NSURLErrorDomain code:retriever->get_error() userInfo:nil]);

Данный сценарий аналогичен и для авторизации по сертификату, только перед отправкой запроса в ретривер необходимо записать отпечаток сертификата (thumbprint). Существует множество вариантов получения отпечатка — мы покажем самый правильный (на наш взгляд). Из примеров для подписи возьмем реализацию некоторых функций, таких как CertOpenStore, для открытия хранилища и CertEnumCertificatesInStore — для получения дескриптора сертификата PCCERT_CONTEXT. После этого пишем функцию для получения отпечатка в NSSting:

- (NSString *)getCertificateHashFromCert:(PCCERT_CONTEXT)certContext {
    
    BYTE *pvData = NULL;
    DWORD cbSize = 0;
    DWORD cbHash = 0;
    
    if(!CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, NULL, &cbSize))
        NSLog(@"CertGetCertificateContextProperty error %u", CSP_GetLastError());
    if (pvData) {
        free(pvData);
    }

    pvData = malloc(cbSize);
    cbHash = cbSize;

    if(!CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, pvData, &cbSize))
        NSLog(@"CertGetCertificateContextProperty error %u", CSP_GetLastError());
    
    DWORD dest;
    if (!CryptBinaryToString(pvData, cbHash, 0, NULL, &dest))
        NSLog(@"CryptBinaryToString error: %u", CSP_GetLastError());
    
    LPWSTR buf = malloc(dest * sizeof(TCHAR));
    
    if (!CryptBinaryToString(pvData, cbHash, 0, buf, &dest))
        NSLog(@"CryptBinaryToString error: %u", CSP_GetLastError());
    
    return [[NSString alloc] initWithData:[NSData dataWithBytes:buf length:dest] encoding:[NSString defaultCStringEncoding]];
}

Первой используется функция CertGetCertificateContextProperty c параметром CERT_SHA1_HASH_PROP_ID, который говорит функции о параметре, который необходимо получить из сертификата, в данном случае — SHA1 hash. Функция вызывается два раза, первый без подстановки буфера, вместо него ставится NULL. Это делается для получения требуемого размера памяти, которую нужно выделить под буфер. Во втором использовании подставляется буфер теперь уже известного размера. Чтобы преобразовать полученные данные из массива байт в строку, используется функция CryptBinaryToString — тоже два раза (по тем же причинам). После этого вы получите красивое содержимое вида:

—----BEGIN CERTIFICATE-----
Хэш
—---- END CERTIFICATE-----/code

Но для ретривера нужен другой формат. Для получения необходимого отпечатка в CryptBinaryToString во флаги (третий параметр) требуется записать флаг CRYPT_STRING_HEX. Полученная в результате строка и будет являться отпечатком, который далее ставится в ретривер:

retriever->set_client_cert([thumbPrint cStringUsingEncoding:[NSString defaultCStringEncoding]]);

Если все сделано правильно, соединение будет успешно установлено с использованием ГОСТа алгоритмов шифрования.

  • Игорь Веденеев

    Руководитель отдела мобильной разработки

    Личная колонка

Как подписывать документы с телефона

Пошаговая инструкция от нашего партнёра, компании «Цифровые технологии»

Главный ресурс сегодня — время. А главный инструмент — смартфон, который заменил нам практически все электронные устройства. С его помощью можно совершать и оплачивать покупки, контролировать свои банковские счета и даже управлять бытовой техникой. Смартфон нужен нам, чтобы экономить время. Теперь с его помощью можно ещё и подписывать электронные документы.

Перенести с компьютера сертификат электронной подписи можно при помощи QR-кода. Для этого нужно установить КриптоПро CSP 5.0 R2 на свой компьютер и КриптоАРМ ГОСТ на свой телефон.

Ниже представлена пошаговая инструкция:

КриптоПро CSP 5.0 R2

Сначала нужно установить на компьютер КриптоПро CSP 5.0 R2

Инструменты КриптоПро

После загрузки КриптоПро CSP 5.0 R2 нужно запустить «Инструменты КриптоПро»

Показать расширенные

Следующий шаг — нажать на кнопку «Показать расширенные» в левом углу

Сертификаты

После этого нужно перейти в раздел «Сертификаты» и нажать кнопку «Экспортировать ключи»

Ввод пароля на PFX

В появившемся окне вы увидите надпись «Ввод пароля на PFX». Пароль вводить необязательно, поэтому просто пропускаем этот пункт

Экспортировать PFX в QR-код

Следующий шаг — выбрать опцию «Экспортировать PFX в QR-код»

Выберите приложение

В появившемся меню вы увидите надпись «Выберите приложение». Вам нужно выбрать «Задать вручную» и ввести следующее значение: CRYPTOARMGOST://CERT/PFX/ADD/

QR-код готов

Перед вами появится сгенерированный QR-код 

Установить приложение КриптоАРМ ГОСТ

Сначала нужно установить приложение КриптоАРМ ГОСТ на телефон (пока доступно только для iOS)

Отсканируйте QR-код

После этого отсканируйте QR-код, который вы сгенерировали на компьютере

Открыть в приложении КриптоАРМ ГОСТ

Следующий шаг — нажать «Открыть в приложении КриптоАРМ ГОСТ»

Ввести пароль

Потом нужно ввести пароль от сертификата и пароль от контейнера

Сертификат успешно импортирован

Как только вы введёте пароль, вы увидите надпись «Сертификат успешно импортирован»

Готово

Теперь сертификат установлен — и вы можете подписывать документы, полученные в электронной почте или мессенджерах, прямо с мобильного устройства

Системные требования к программно-аппаратным средствам:

  • Установка СКЗИ КриптоПро CSP версии 5.0.
  • Операционная система Windows 7/8.1/10/Server 2008 (x86, x64).
  • Серверные ОС Windows Server 2008 R2/2012/2012 R2/2016/2019 (x64).
  • Mac OS X 10.9/10.10/10.11/10.12/10.13/10.14 (x64).

Для установки приложения MyDss на смартфоне, он должен работать под управлением операционных систем:

  • Android 7.0 и выше.
  • iOS 8/9/10/11.

Установка и настройка на смартфоне приложения MyDss #

Установка на смартфоне приложения MyDSS #

Запускаем приложение Play Маркет или Apple store в зависимости от типа вашего устройства. В форме поиске, введите myDSS и нажмите кнопку Установить. После окончания установки нажимаем на кнопку Открыть.

Настройка приложения MyDSS #

Запустите установленное приложение MyDss. Для начала работы вам предложат от сканировать QR-код. Приложение отправит запрос на доступ к камере телефона, нажмите Разрешить. Возьмите бланк сертификата, выданного вам в УЦ и отсканируйте напечатанный QR-код. Укажите имя сохраняемого ключа(Оно может быть любым, например: «Облачная подпись для Торгов»). Так же вам потребуется выбрать способ подтверждения (без пароля, пароль, отпечаток пальца, face ID). После всех этих действий приложение будет готово к работе.

Установка СКЗИ КриптоПро CSP 5 #

Для начала работы с вашей облачной подписью необходима установленная ОС Windows 7, 8,8.1 или 10. Необходимо проверить, что у вашей Операционной Системы установлены все последние обновления. Для этого запустите Центр Обновления Windows и произведите поиск и обновления компонентов Windows.
Основным элементом для работы с облачной подписью является установленное и настроенное КриптоПро CSP 5.0.

  1. Скачиваем последнюю версию установочного файла КриптоПро CSP 5.0 с сайта разработчика КриптоПро.
  2. Запускаем скачанный Файл CSPSetup-5.0.exe и нажимаем кнопку Установить.Подробный процесс установки КриптоПро здесь.
  3. Скачайте корневой сертификат Минкомсвязи России и установите его в «Доверенные корневые центры сертификации».
  4. Установить корневой сертификат вашего УЦ в «Промежуточные центры сертификации». Инструкция по установке корневого сертификата Минкомсвязи и УЦ.

Настройка КриптоПро CSP 5.0 #

В операционной системе Windows: Нажимаем Пуск , переходим в папку Крипто-Про и выбираем пункт Инструменты Крипто-Про.

Меню КриптоПро 5.

Далее переходим в раздел Облачный провайдер.

Облачный провайдер

Замена адреса DSS сервера #

  • Необходимо поменять текст в строке Сервер авторизации на адрес вашего сервера DSS(Адрес можно уточнить у вашего УЦ).
  • Так же измените текст в строке Сервер DSS на адрес предоставленный вашим УЦ.
  • Нажимаем на кнопку Установить сертификаты.

Замена DSS

На следующем шаге укажите логин полученный вами в точке выдачи и нажмите кнопку далее.

Если это первый ваш вход в систему, то вам предложат изменить пароль для входа в личный кабинет облачной подписи. Чтобы это сделать укажите пароль полученный вами в точке выдачи. Вводим его в графу Старый пароль, а ниже указываем Новый пароль и Подтверждение пароля. После установки вашего нового пароля, обязательно запишите его.

Если вы уже изменяли пароль ранее, то предложения изменить пароль не будет.

Аутентификация в приложении myDSS #

Следующим действием нам потребуется пройти Аутентификацию. Потребуется подтвердить операцию с помощью установленного приложения MyDss. Запустите приложение MyDss на смартфоне, и в открывшемся запросе нажимаем Подтвердить. Если на телефоне нет интернет соединения, то выбираем Используйте офлайн-подтверждение. Сканируем приложением MyDss QR-код и указываем полученный код подтверждения на компьютере.

Конечным результатом успешной авторизации, должно стать уведомление Установка сертификатов завершилась успехом.

Установка облачных сертификатов КриптоПро 5.0

На этом установка и настройка облачной электронной подписи закончена.

Купить Электронную Подпись для любых целей вы можете в нашей компании. Срок выдачи один рабочий день.

Заказать облачную подпись #

Содержание

  1. ИНСТРУКЦИЯ ПО ПОЛУЧЕНИЮ ЭЦП И ЗАГРУЗКЕ СЕРТИФИКАТА НА МОБИЛЬНЫЙ ТЕЛЕФОН
  2. Как перенести эцп с компьютера на смартфон
  3. Как перенести Эцп на телефон?
  4. Можно ли скачать Эцп на телефон?
  5. Как сделать копию ключа Эцп?
  6. Как перенести Эцп?
  7. Как скачать Эцп с Егов?
  8. Как установить Эцп на андроид?
  9. Как установить NCALayer на телефон?
  10. Как узнать есть ли у меня Эцп?
  11. Как открыть ключ Эцп дома?
  12. Как скопировать сертификат?
  13. Как скопировать ЭП?
  14. Как скопировать сертификат в реестр?
  15. Как перенести Эцп с телефона на компьютер?
  16. Как скопировать ключ Крипто Про?
  17. Как добавить сертификат в контейнер закрытого ключа?
  18. Как скопировать электронную подпись
  19. Как скопировать электронную подпись
  20. Способы копирования ЭЦП
  21. Как выполнить копирование ЭЦП средствами Windows
  22. Как экспортировать ЭЦП с помощью КриптоПро CSP
  23. Массовое копирование ключей
  24. Где оформить ЭЦП и получить помощь

ИНСТРУКЦИЯ ПО ПОЛУЧЕНИЮ ЭЦП И ЗАГРУЗКЕ СЕРТИФИКАТА НА МОБИЛЬНЫЙ ТЕЛЕФОН

Для получения ЭЦП вам необходимо выполнить следующие шаги:

1. Подайте заявку на сайте НУЦРК http://pki.gov.kz/index.php/ru/fizicheskie-litsa через ваш компьютер. При подаче заявки в качестве места хранения ключей укажите файловую систему. В случае выбора места хранения «Персональный компьютер», в поле «Путь к хранилищу ключей» укажите папку, в которой будут созданы ключевые контейнера (закрытые ключи).

2. Заполните поля онлайн-заявки.

3. Запомните номер заявки, он необходим для идентификации Вашей заявки в Центре Регистрации, а также для установки выпущенных регистрационных свидетельств.

4. Распечатайте заявление с указанным номером заявки и отнесите ее в Центр регистрации в течении 1 месяца с даты подачи заявки. В случае если Вы не подтвердили заявку в Центре регистрации в указанный период, заявка будет аннулирована. Сотрудники Центра регистрации должны подтвердить вашу заявку. При себе необходимо иметь удостоверение личности.

6. После подтверждения заявки установите сертификаты, два регистрационных свидетельства с закрытыми ключами, (файлы AUT_RSA-. RSA-. p12) на ваш компьютер по ссылке, которая будет выслана также на адрес электронной почты.

Для загрузки сертификата вам необходимо выполнить следующие шаги:

1. Перенесите файл RSA-. p12 с компьютера на смартфон.

Способ перенесения и пошаговые действия для установки ЭЦП:

1. Подключите смартфон через USB кабель к вашему компьютеру. На компьютере пройдите в «Мой компьютер», найдите ваш подключенный мобильный телефон далее пройдите в папку «Phone», затем скопируйте ваш ЭЦП в удобную для вас папку, например «Download».

2. На компьютере пройдите в «Мой компьютер», найдите ваш подключенный мобильный телефон далее пройдите в папку «Phone», затем скопируйте ваш ЭЦП в удобную для вас папку, например «Download». Перенос ЭЦП на мобильный телефон завешен.

3440470eef288225f9b343f35cdb98b7

3. После того, как файл ЭЦП загружен в мобильный телефон, необходимо войти в мобильное приложение, затем в разделе Личный кабинет выбрать вкладку ЭЦП.

5bbbe6a53a0aed7e2de00fab71b32de8

4. Нажимаем на кнопку «Выбрать сертификат» в открывшемся окне выбираем файл ЭЦП на вашем устройстве (указать путь к файлу).

b79121cced77e14b2f2293455cf6380b

Если введен правильный путь к ЭЦП, то на экране отобразятся сведения сертификата ЭЦП.

b8ee52e032491c83be82f1a80b6c7644

5. Вводим PIN код (пароль ЭЦП) и нажимаем на кнопку «Войти»

67b8df98e5467bdc51a3ac23e36d0bf6

6. Далее вы можете пользоваться услугами «АО ЕНПФ»

Для загрузки сертификата вам необходимо выполнить следующие шаги:

1. Установите программу iTunes на ваш компьютер.

2. Подключите смартфон к компьютеру, используя USB кабель.

4. Найдите среди списка программ мобильное приложение АО ЕНПФ и перенесите файл RSA-. p12 в хранилище с компьютера на смартфон при помощи курсора.

Источник

Как перенести эцп с компьютера на смартфон

Количество просмотров: 2869

Компания «Цифровые технологии» выпустила версию 2.4.5 мобильного приложения «КриптоАРМ ГОСТ». Из нового, в первую очередь следует отметить установку сертификатов «облачной» электронной подписи из веб-сервисов на базе ПАК «КриптоПро DSS». Кроме этого стало возможным переносить сертификаты электронной подписи с компьютера на телефон с помощью QR-кода.

Облачная электронная подпись обладает всеми свойствами и функциями традиционной электронной подписи, с одним существенным различием – сертификат электронной подписи хранится не на токене или смарт-карте, а на сервере удостоверяющего центра.

В последнем обновлении «КриптоАРМ ГОСТ» вы можете выбрать «Установить сертификаты из DSS» при добавлении нового сертификата. Чтобы установить «облачный» сертификат, укажите адрес сервиса DSS и введите свой логин-пароль в системе. После успешной авторизации ваши сертификаты из DSS будут автоматически установлены в приложении и станут доступны для подписи.

Процедура подписи немного отличается от привычной. Документ сначала отправляется на сервер DSS, затем отправителю приходит SMS сообщение с подтвердить операцию над указанным документом. Для подтверждения нужно ввести ПИН-код от ключа подписи. После получения подтверждения, документ подписывается на сервере вашим сертификатом и возвращается обратно в приложение.

Полный список изменений в «КриптоАРМ ГОСТ» версии 2.4.5:

Приложение «КриптоАРМ ГОСТ» доступно для установки в App Store или Google Play. Бесплатно первые две недели.

В следующей версии мобильного приложения КриптоАРМ ГОСТ планируется: добавить возможность подтверждения операций с «облачной» подписью внутри приложения КриптоАРМ ГОСТ, возможность просмотра содержимого документов, подписываемых «облачной» подписью, а такке поддержка подписи со штампами времени и стандарта Усовершенствованной электронной подписи.

Источник

Как перенести Эцп на телефон?

пройдите в «Мой компьютер», найдите ваш подключенный мобильный телефон далее пройдите в папку «Phone», затем скопируйте ваш ЭЦП в удобную для вас папку, например «Download». Перенос ЭЦП на мобильный телефон завешен. Далее вы можете пользоваться услугами Мобильного правительства.

Можно ли скачать Эцп на телефон?

🔔 Важное замечание: ЭЦП полученные через телефон можно использовать только на телефоне, скачать или передать кому-то файлы подписи не получится. Если вам нужна передаваемая ЭЦП заявку на получение нужно подавать через компьютер или ЦОН.

Как сделать копию ключа Эцп?

В программе «КриптоПро» перейдите на вкладку «Сервис» и нажмите на клавишу «Скопировать». Затем нажмите на кнопку «Обзор» и выберите ключевой контейнер, который хотите скопировать. Кликните «Далее» и укажите новое произвольное имя копии контейнера.

Как перенести Эцп?

Для того чтобы скопировать электронную подпись с флешки на флешку, откройте программу «КриптоПро», перейдите на вкладку «Сервис» и кликните «Скопировать». Нажмите на кнопку «Обзор» и выберите ключевой контейнер (сертификат). Нажмите «Далее» и укажите новое имя копии сертификата.

Как скачать Эцп с Егов?

Запустите браузер и наберите в адресной строке: www.pki.gov.kz. Появится главная страница Национального удостоверяющего центра Республики Казахстан (Рис. 1). Нажмите на меню «Получить ключи ЭЦП».

Как установить Эцп на андроид?

Если у вас телефон на платформе Android, загрузить ЭЦП на сотовый телефон можно как обычный файл, с использованием USB кабеля. Подключите смартфон через USB-кабель к компьютеру, зайдите в «Мой компьютер», где будут отображены съемные носители, после скопируйте ЭЦП (файлы с AUTH, RSA-….. p12) на карту памяти смартфона.

Как установить NCALayer на телефон?

Как установить NCALayer

Как узнать есть ли у меня Эцп?

Проверка подлинности ЭЦП на сайте Государственных услуг

Как открыть ключ Эцп дома?

Сама процедура получения ЭЦП выглядит следующим образом: вы подаете заявку на сайте pki.gov.kz, скачиваете и распечатываете заявление с уникальным кодом, которое потом несете в ЦОН (не забудьте захватить удостоверение личности).

Как скопировать сертификат?

Выберите «Пуск» > «Панель управления» > «КриптоПро CSP». Перейдите на вкладку «Сервис» и кликните по кнопке «Скопировать». В окне «Копирование контейнера закрытого ключа» нажмите на кнопку «Обзор». Выберите контейнер, который необходимо скопировать, и кликните по кнопке «Ок», затем «Далее».

Как скопировать ЭП?

Как скопировать ключ

Как скопировать сертификат в реестр?

КриптоПро CSP: Как установить/скопировать сертификат/контейнер/ключ в реестр?

Как перенести Эцп с телефона на компьютер?

пройдите в «Мой компьютер», найдите ваш подключенный мобильный телефон далее пройдите в папку «Phone», затем скопируйте ваш ЭЦП в удобную для вас папку, например «Download». Перенос ЭЦП на мобильный телефон завешен. Далее вы можете пользоваться услугами Мобильного правительства.

Как скопировать ключ Крипто Про?

Для копирования ключевого контейнера:

Как добавить сертификат в контейнер закрытого ключа?

Источник

Как скопировать электронную подпись

Для того чтобы скопировать сертификат электронной подписи (ключевой контейнер), выполните следующие действия:

c858a4045f229993830d37854e2000b8

В программе «КриптоПро» перейдите на вкладку «Сервис» и нажмите на клавишу «Скопировать».

e48c77883eb8a0c1654551d107a12c07

Затем нажмите на кнопку «Обзор» и выберите ключевой контейнер, который хотите скопировать.

Кликните «Далее» и укажите новое произвольное имя копии контейнера.

108b38dffcbd67f2c2abdaff60d07660

Теперь нажмите на клавишу «Готово» и в открывшемся окне укажите носитель, на который будете копировать контейнер (Диск X (флэш-накопитель), Реестр компьютера, E-token / Рутокен, и другие).

Далее укажите пароль для создаваемого контейнера. Но также можете оставить поле «Пароль» пустым. Нажмите «Ок».

В том случае, если нужный носитель не виден, откройте меню «Пуск» и кликните последовательно: «Панель управления» — «КриптоПро CSP» — «Оборудование» — «Настроить считыватели».

f59dfbf0a6677796c1c90c99db66d507

Теперь установленный сертификат привязан к контейнеру, из которого он был установлен.

Источник

Как скопировать электронную подпись

Из нашей статьи вы узнаете:

Электронную цифровую подпись традиционно записывают на токен в виде USB-карты, что позволяет использовать ее на разных компьютерах и не зависеть от одного рабочего места. Однако необходимость скопировать ключи и сертификаты может появиться в следующих случаях:

Способы копирования ЭЦП

Сегодня доступно копирование цифровой электронной подписи следующими способами:

Как выполнить копирование ЭЦП средствами Windows

Это самый оперативный и простой вариант переноса данных, который сработает только в отношении ключей, находящихся в реестре операционной системы. Также понадобится установленная программа КриптоПро в версии не ниже 3.0. Для выполнения операции выполните следующие действия:

image1

image2

image3

image4

image5

image6

Теперь можно использовать электронную подпись без носителя ключа.

Как экспортировать ЭЦП с помощью КриптоПро CSP

Утилита позволяет записать контейнер на другой ПК или флешку. Сделать это можно следующим образом:

image7

image8

image9

image10

image11

image12

Возможность копирования контейнера доступна только при наличии активного параметра «Экспортируемый», который должен быть выбран ещё на стадии генерации ЭЦП. В противном случае система выдаст только ошибку.

Массовое копирование ключей

Способ позволяет за один раз перенести на другой компьютер несколько цифровых подписей одновременно. Для этого на компьютере создайте новую ветку и скопируйте путь с основного рабочего ПК. Сам процесс копирования идёт следующим образом:

image13

Если не получилось скопировать

Процесс переноса электронной подписи с компьютера на флешку любым из предложенных способов обычно проходит без ошибок. Однако в некоторых случаях сохранить ЭЦП не удаётся — возникает «Ошибка копирования контейнера».

Если появилась ошибка, то владельцу подписи нужно обратиться в удостоверяющий центр, который выдал данную электронную подпись. Невозможность копирования контейнера свидетельствует о том, что ключ защищён и нужно получить его копию.

Где оформить ЭЦП и получить помощь

Если для работы вам необходима цифровая электронная подпись, то обращайтесь в УЦ «Астрал-М». Мы специализируемся на оформлении ЭЦП любого типа, предлагая следующие преимущества:

Для оформления ЭЦП оставьте заявку на сайте, заполнив форму обратной связи, или свяжитесь с нами по телефону. При необходимости возможно открытие подписи в офисе клиента и в ускоренном формате.

Источник

  • Как установить детский контроль на телефоне
  • Как установить корпоративную почту на телефон
  • Как установить пароль на телефон samsung
  • Как установить детские часы на телефон
  • Как установить корейскую клавиатуру на телефон