(2018-12-12 12:28:29 отредактировано HDDC)

Android. C_EX_PKCS7Sign подпись.

Доброго времени суток.
Пытаемся использовать Рутокен для подписи в ЭДО.

Возникла трудность при попытке вызывать функцию C_EX_PKCS7Sign.

Ей требуется хэндл объекта сертификата.

1. Рутокены включают в себя какие-нибудь сертфикаты?
2. Включают ли они сертификаты для подписи GOST-R 3410-2012?
3. Как получить хэндл сертификата, если ответ на предыдущие вопросы положительный?

Пробуем так:

        CK_ATTRIBUTE [] findCert = new CK_ATTRIBUTE[1];
        findCert[0] = new CK_ATTRIBUTE();
        findCert[0].setAttr(new NativeLong(CKA_CLASS), new NativeLong(CKO_CERTIFICATE));

        // Ищем все сертификаты. Нам нужен объект сертификата с поддержкой ГОСТР
        NativeLong rv = mPkcs11.C_FindObjectsInit(sessionHandle, findCert,  new NativeLong(findCert.length) );
        checkResultIsOk("C_FindObjectsInit", rv);

        NativeLong [] results = new NativeLong[1];
        results[0] = new NativeLong();
        NativeLongByReference resCount = new NativeLongByReference();
        rv = mPkcs11.C_FindObjects(sessionHandle, results, new NativeLong(results.length), resCount);
        checkResultIsOk("C_FindObjects", rv);

        rv = mPkcs11.C_FindObjectsFinal(sessionHandle);
        checkResultIsOk("C_FindObjectsFinal", rv);

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

К сожалению, как-то мало примеров гуглится на эту тему.

Заранее спасибо!

P.S.
Походу действительно нет сертификата. Подключил к большой винде - ничего нет. Наверное пока отбой по теме.

Re: Android. C_EX_PKCS7Sign подпись.

Добрый день, HDDC.

1. Сертификаты выписываются на токен с помощью Удостоверяющего центра. Если мы говорим про ГОСТ сертификаты, то это должен быть аккредитованный Удостоверяющий центр. Но для тестовых целей Вы сами можете создать самоподписанные сертификаты. Например, на нашем портале - https://ra.rutoken.ru/
2. Рутокен ЭЦП 2.0 поддерживает алгоритм  GOST-R 3410-2012, как с короткими, так и с длинными ключами.
3. Создайте тестовый сертификат и ваш код сможет найти сертификат.