Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Artem Frolov  
#1 Оставлено : 26 июля 2019 г. 14:20:21(UTC)
Artem Frolov

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.05.2019(UTC)
Сообщений: 8
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Добрый день

Мы пользуемся продуктом CryptoPro.jcp в рамках интеграционного решения с оператором ЭДО Диадок. После обновления до версии jcp-2.0.40132-A возникла проблема с приязкой подписи к документу при отправке его оператору ЭДО (ошибка - Подписанные данные были искажены после момента подписания). При это сам КЭП корректен и работает как в веб-интерфейсе оператора ЭДО, так и проходит проверку на сайте госуслуг. Со своей стороны проверили структуру интеграционного решения и настройки со стороны оператора ЭДО - выглядит все корректно. Возможно проблема кроется в настройках Crypto pro JCP. Используем подпись с GOST3410DHEL (GOST R 34.11-2012/34.10-2012 256 bit). Есть ли какая-то инструкция по настрйке JCP (через ContolPane) под данный ГОСТ?

Ошибка подписи

Отредактировано пользователем 26 июля 2019 г. 15:32:07(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 26 июля 2019 г. 15:53:15(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,414
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 17 раз
Поблагодарили: 563 раз в 537 постах
Здравствуйте.
Можно ли получить образец подписи для анализа?
Известно ли, какой используется код для подписи?
Обновляли именно до А-версии jcp-2.0.40132-A, или просто jcp-2.0?
Какая версия использовалась до этого, какой ключ - ГОСТ 2012 или ГОСТ 2001?
Offline Artem Frolov  
#3 Оставлено : 29 июля 2019 г. 10:44:35(UTC)
Artem Frolov

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.05.2019(UTC)
Сообщений: 8
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Добрый день

до этого использовали jcp 1.0.54, ГОСТ 2001
сейчас пытаемся использовать jcp-2.0.40132-A, ГОСТ 2012

открытый ключ
https://onebox.huawei.co...db789408d50c51d47cdb864d

файлы электронной подписи
https://onebox.huawei.co...6d759178c3e992f2ba4f9aa1


Примеры кода для подписей:

CertificateHelper (DiadocSDK 2.13.0)

DiadocSenderAdapter (наше интеграционное решение)

Отредактировано пользователем 29 июля 2019 г. 11:50:34(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 29 июля 2019 г. 12:49:25(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,414
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 17 раз
Поблагодарили: 563 раз в 537 постах
CertificateHelpder с методом создания CMS-подписи выглядит так, что в нем зафиксировали в коде константы:
Код:

cms.signerInfos.elements[0].digestAlgorithm = new DigestAlgorithmIdentifier((new OID("1.2.643.2.2.9")).value);
cms.signerInfos.elements[0].signatureAlgorithm = new SignatureAlgorithmIdentifier((new OID("1.2.643.2.2.19")).value);

Для ГОСТ 2012 идентификаторы (oid'ы вида 1.2.643.xxxx) другие.
P.S. А также JCP версии с суффиксом -A должен использоваться в java версии 10 и выше, для java 7-8 нужно использовать JCP без -A.

Отредактировано пользователем 29 июля 2019 г. 12:50:41(UTC)  | Причина: Не указана

Offline Artem Frolov  
#5 Оставлено : 29 июля 2019 г. 15:03:13(UTC)
Artem Frolov

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.05.2019(UTC)
Сообщений: 8
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Мы также пробовали такой вариант. Результат тотже - ошибка.
Если мы пробовали неправильные идентификаторы, то не подскажете, какие нужно?

Код:

Signature signature = Signature.getInstance("GOST3411_2012_256withGOST3410_2012_256");


Код:

cms.signerInfos.elements[0].digestAlgorithm = new DigestAlgorithmIdentifier(AlgIdSpec.OID_DIGEST_2012_256.value);
cms.signerInfos.elements[0].signatureAlgorithm = new SignatureAlgorithmIdentifier(AlgIdSpec.OID_PARAMS_SIG_2012_256.value);

Отредактировано пользователем 29 июля 2019 г. 15:17:59(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#6 Оставлено : 30 июля 2019 г. 12:26:54(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,414
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 17 раз
Поблагодарили: 563 раз в 537 постах
Приложенные примеры проверим и отпишем о результатах.
Offline Elvira Borodina  
#7 Оставлено : 30 июля 2019 г. 16:54:08(UTC)
Elvira Borodina

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 24.04.2018(UTC)
Сообщений: 24
Российская Федерация

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 8 раз в 6 постах
Добрый день!
В последнем сообщении вы прописали правильные OID-ы и алгоритмы. С ними все должно работать для ключей ГОСТ Р 2012 (256).
Код:

Signature signature = Signature.getInstance("GOST3411_2012_256withGOST3410_2012_256");
cms.signerInfos.elements[0].digestAlgorithm = new DigestAlgorithmIdentifier((new OID("1.2.643.7.1.1.2.2")).value); // AlgIdSpec.OID_DIGEST_2012_256
cms.signerInfos.elements[0].signatureAlgorithm = new SignatureAlgorithmIdentifier((new OID("1.2.643.7.1.1.1.1")).value); // AlgIdSpec.OID_PARAMS_SIG_2012_256


Еще раз хотели бы уточнить, JRE какой версии вы используете? Версия jcp-2.0.40132-A предназначена для использования в JRE версии 10 и выше.
Если вы используете JRE версии 7 или 8, то вам следует установить jcp-2.0.40035 (без -A).

Для JRE версии 10 и выше (в отличии от JRE 7-8) установка JCP не производится. Библиотеки добавляются в classpath.
Также в этом случае необходимо добавить наши провайдеры либо в список файла java.security:
Код:

security.provider.<N>=JCP  //провайдер JCP
security.provider.<N+1>=RevCheck // провайдер проверки сертификатов  JCPRevCheck (revocation-провайдер)
security.provider.<N+2>=Crypto // провайдер шифрования JCryptoP

либо добавить их программно с помощью функции Security.addProvider (перед вызовом функций, использующих наши провайдеры):
Код:

Security.addProvider(new JCP()); // провайдер JCP
Security.addProvider(new RevCheck());
Security.addProvider(new CryptoProvider());// провайдер шифрования JCryptoP


Все это описано в документации.

Если вы все установили/настроили корректно, то можете включить логирование (в файле logging.properties) и прислать нам лог?

Отредактировано пользователем 30 июля 2019 г. 17:09:00(UTC)  | Причина: Не указана

Offline Artem Frolov  
#8 Оставлено : 31 июля 2019 г. 17:46:03(UTC)
Artem Frolov

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.05.2019(UTC)
Сообщений: 8
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Добрый день.
Используем JRE 10. Провайдеры прописали.
При попытке включить логирование выдает ошибку

файл logging.properties

Отредактировано пользователем 31 июля 2019 г. 17:46:47(UTC)  | Причина: Не указана

Offline Elvira Borodina  
#9 Оставлено : 31 июля 2019 г. 19:38:38(UTC)
Elvira Borodina

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 24.04.2018(UTC)
Сообщений: 24
Российская Федерация

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 8 раз в 6 постах
Добрый вечер.
Попробуйте такой вариант:

Offline Artem Frolov  
#10 Оставлено : 1 августа 2019 г. 12:33:40(UTC)
Artem Frolov

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.05.2019(UTC)
Сообщений: 8
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Автор: borodina Перейти к цитате
Добрый вечер.
Попробуйте такой вариант:


Спасибо, помогло

Логи: LogiKriptoPRO.txt (59kb) загружен 7 раз(а).

Отредактировано пользователем 1 августа 2019 г. 12:50:58(UTC)  | Причина: Не указана

Offline Elvira Borodina  
#11 Оставлено : 1 августа 2019 г. 13:42:30(UTC)
Elvira Borodina

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 24.04.2018(UTC)
Сообщений: 24
Российская Федерация

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 8 раз в 6 постах
Добрый день!
В логах ошибок нет.
Не могли бы вы приложить подпись (сделанную на OID-ах 2012-года) и сертификат в виде файлов (как лог)? К сожалению, не получается скачать их по вашим ссылкам.
Спасибо.
Offline Artem Frolov  
#12 Оставлено : 1 августа 2019 г. 15:24:47(UTC)
Artem Frolov

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.05.2019(UTC)
Сообщений: 8
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
открытый ключ
gorshkov.cer (3kb) загружен 4 раз(а).

файлы электронной подписи
signError.rar (133kb) загружен 7 раз(а).

Отредактировано пользователем 1 августа 2019 г. 15:25:28(UTC)  | Причина: Не указана

Offline Elvira Borodina  
#13 Оставлено : 1 августа 2019 г. 17:28:37(UTC)
Elvira Borodina

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 24.04.2018(UTC)
Сообщений: 24
Российская Федерация

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 8 раз в 6 постах
В присланной вами подписи по-прежнему содержатся алгоритмы 2001-года (хэширования и подписи). Что не соответствует ключу 2012 года.
Проверьте еще раз ваш код и исправьте все OID-ы и алгоритм на правильные:
Код:

  public static byte[] createCMS(byte[] buffer, byte[] sign, Certificate cert, boolean detached) throws Exception {
            ContentInfo all = new ContentInfo();
            all.contentType = new Asn1ObjectIdentifier((new OID("1.2.840.113549.1.7.2")).value);
            SignedData cms = new SignedData();
            all.content = cms;
            cms.version = new CMSVersion(1L);
            cms.digestAlgorithms = new DigestAlgorithmIdentifiers(1);
            DigestAlgorithmIdentifier a = new DigestAlgorithmIdentifier((new OID("1.2.643.7.1.1.2.2")).value);
            a.parameters = new Asn1Null();
            cms.digestAlgorithms.elements[0] = a;
            if (detached) {
                cms.encapContentInfo = new EncapsulatedContentInfo(new Asn1ObjectIdentifier((new OID("1.2.840.113549.1.7.1")).value), (Asn1OctetString)null);
            } else {
                cms.encapContentInfo = new EncapsulatedContentInfo(new Asn1ObjectIdentifier((new OID("1.2.840.113549.1.7.1")).value), new Asn1OctetString(buffer));
            }

            cms.certificates = new CertificateSet(1);
            ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate certificate = new ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate();
            Asn1BerDecodeBuffer decodeBuffer = new Asn1BerDecodeBuffer(cert.getEncoded());
            certificate.decode(decodeBuffer);
            cms.certificates.elements = new CertificateChoices[1];
            cms.certificates.elements[0] = new CertificateChoices();
            cms.certificates.elements[0].set_certificate(certificate);
            cms.signerInfos = new SignerInfos(1);
            cms.signerInfos.elements[0] = new SignerInfo();
            cms.signerInfos.elements[0].version = new CMSVersion(1L);
            cms.signerInfos.elements[0].sid = new SignerIdentifier();
            byte[] encodedName = ((X509Certificate)cert).getIssuerX500Principal().getEncoded();
            Asn1BerDecodeBuffer nameBuf = new Asn1BerDecodeBuffer(encodedName);
            Name name = new Name();
            name.decode(nameBuf);
            CertificateSerialNumber num = new CertificateSerialNumber(((X509Certificate)cert).getSerialNumber());
            cms.signerInfos.elements[0].sid.set_issuerAndSerialNumber(new IssuerAndSerialNumber(name, num));
            cms.signerInfos.elements[0].digestAlgorithm = new DigestAlgorithmIdentifier((new OID("1.2.643.7.1.1.2.2")).value);
            cms.signerInfos.elements[0].digestAlgorithm.parameters = new Asn1Null();
            cms.signerInfos.elements[0].signatureAlgorithm = new SignatureAlgorithmIdentifier((new OID("1.2.643.7.1.1.1.1")).value);
            cms.signerInfos.elements[0].signatureAlgorithm.parameters = new Asn1Null();
            cms.signerInfos.elements[0].signature = new SignatureValue(sign);
            Asn1BerEncodeBuffer asnBuf = new Asn1BerEncodeBuffer();
            all.encode(asnBuf, true);
            return asnBuf.getMsgCopy();
        }

        public static byte[] CMSSign(byte[] data, PrivateKey key, Certificate cert, boolean detached) throws Exception {
            Signature signature = Signature.getInstance("GOST3411_2012_256withGOST3410_2012_256");
            signature.initSign(key);
            signature.update(data);
            byte[] sign = signature.sign();
            return createCMS(data, sign, cert, detached);
        }


Если и после этого подпись не будет проверяться, пришлите еще раз, посмотрим.
thanks 1 пользователь поблагодарил Elvira Borodina за этот пост.
Artem Frolov оставлено 07.08.2019(UTC)
Offline Artem Frolov  
#14 Оставлено : 7 августа 2019 г. 15:54:53(UTC)
Artem Frolov

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.05.2019(UTC)
Сообщений: 8
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Большой спасибо. Помогло.

Есть еще вопрос. Можно как-то прописать OIDы, чтобы они поддерживали и старые и новые подписи?

Отредактировано пользователем 7 августа 2019 г. 16:08:46(UTC)  | Причина: Не указана

Offline testerr  
#15 Оставлено : 9 августа 2019 г. 17:18:02(UTC)
testerr

Статус: Новичок

Группы: Участники
Зарегистрирован: 09.08.2019(UTC)
Сообщений: 3
Австрия
Откуда: 111

Добрый день!
Не подскажите, как настроить логирование криптографических операций на WAS, приложение работает на WAS, используется JCP 2.0, как нужно настроить logging.properties?
Уже все перепробовал, ничего не помогает. Можно рабочий пример. Или какой handlers указывать, со стандартным не работает
Offline Евгений Афанасьев  
#16 Оставлено : 9 августа 2019 г. 17:40:00(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,414
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 17 раз
Поблагодарили: 563 раз в 537 постах
Здравствуйте.

Посмотрите документ Howto_set_gost_tls_WAS.doc в папке Doc\WebServerIntegration\IbmWAS\ дистрибутива JCP.
Offline testerr  
#17 Оставлено : 9 августа 2019 г. 17:42:28(UTC)
testerr

Статус: Новичок

Группы: Участники
Зарегистрирован: 09.08.2019(UTC)
Сообщений: 3
Австрия
Откуда: 111

Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.

Посмотрите документ Howto_set_gost_tls_WAS.doc в папке Doc\WebServerIntegration\IbmWAS\ дистрибутива JCP.


Смотрел, пытался настроить логирование через сферу, результата нет( может есть реальные примеры, то что в документации не отражает реальной действительности
Offline Elvira Borodina  
#18 Оставлено : 12 августа 2019 г. 7:14:04(UTC)
Elvira Borodina

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 24.04.2018(UTC)
Сообщений: 24
Российская Федерация

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 8 раз в 6 постах
Автор: Artem Frolov Перейти к цитате

Есть еще вопрос. Можно как-то прописать OIDы, чтобы они поддерживали и старые и новые подписи?


Добрый день!
Универсальных OID-ов не существует.
Алгоритм подписи должен соответствовать алгоритму ключа, набор OID-ов тоже должен быть соответствующим.
Offline Elvira Borodina  
#19 Оставлено : 12 августа 2019 г. 8:58:57(UTC)
Elvira Borodina

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 24.04.2018(UTC)
Сообщений: 24
Российская Федерация

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 8 раз в 6 постах
Автор: testerr Перейти к цитате
Добрый день!
Не подскажите, как настроить логирование криптографических операций на WAS, приложение работает на WAS, используется JCP 2.0, как нужно настроить logging.properties?
Уже все перепробовал, ничего не помогает. Можно рабочий пример. Или какой handlers указывать, со стандартным не работает


Здравствуйте. Какую именно информацию вам нужно логировать?
В штатном режиме используется уровень логирования INFO, который вывод в лог только основную информацию (и ошибки, если они происходят).
Для более подробного логирования можно использовать уровни FINE или ALL. Но пользоваться или нужно только для анализа некой проблемы, поскольку с ними лог будет быстро расти.

Для включения подробного лога попробуйте такой вариант logging.properties:


Offline testerr  
#20 Оставлено : 12 августа 2019 г. 9:22:37(UTC)
testerr

Статус: Новичок

Группы: Участники
Зарегистрирован: 09.08.2019(UTC)
Сообщений: 3
Австрия
Откуда: 111

Автор: Elvira Borodina Перейти к цитате
Автор: testerr Перейти к цитате
Добрый день!
Не подскажите, как настроить логирование криптографических операций на WAS, приложение работает на WAS, используется JCP 2.0, как нужно настроить logging.properties?
Уже все перепробовал, ничего не помогает. Можно рабочий пример. Или какой handlers указывать, со стандартным не работает


Здравствуйте. Какую именно информацию вам нужно логировать?
В штатном режиме используется уровень логирования INFO, который вывод в лог только основную информацию (и ошибки, если они происходят).
Для более подробного логирования можно использовать уровни FINE или ALL. Но пользоваться или нужно только для анализа некой проблемы, поскольку с ними лог будет быстро расти.

Для включения подробного лога попробуйте такой вариант logging.properties:




Нужен вызов всех криптографических операций.
Данный лог должен писаться в SystemOut.log? Или куда - то еще.
При вызове Панели Криптопро, запись в файл происходит, а вот при вызове из приложения нет.
Вот лог в криптопро, хотя уровень логирования в сфере стоит all
0000016a JCPLogger I ru.CryptoPro.JCP.tools.Starter check Loading JCP 2.0.40035
0000016a JCPLogger I ru.CryptoPro.JCP.tools.Starter check JCP loaded.
В логе вызов только однократный. Есть еще какие-то рекомендации ?
Нельзя ли настроить вызов через log4j?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.