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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline omikheev  
#1 Оставлено : 22 октября 2010 г. 21:54:10(UTC)
omikheev

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

Группы: Участники
Зарегистрирован: 22.10.2010(UTC)
Сообщений: 6
Откуда: SPb

Добрый день

У нас установлен CSP 3.6.5236 (core version: 3.6.4071KC1)
Мы создаем P7S DER подписи при помощи CryptoARM, затем проверяем их с помощью JCP 1.0.46
Все работает при выборе опции в CryptoARM "сохранить подпись в отдельном файле"

Но когда эта опция не указывается все валится со следующей ошибкой:

Exception in thread "main" java.io.IOException: short read on DerValue buffer
at sun.security.util.DerValue.getOctetString(DerValue.java:459)
at sun.security.pkcs.ContentInfo.getData(ContentInfo.java:155)

Как вы заметили мы работаем используя стандартные Java API и используем sun.security.pkcs.PKCS7
Т.о. генерируемая подпись с включенным контентом не понимается классом PKCS7 - это известная проблема, или мы делаем что-то не так?

Привожу наш код:
Код:

        final CertificateFactory cf = CertificateFactory.getInstance("X509");
        java.security.cert.Certificate certificate = cf.generateCertificate(new FileInputStream(args[2]));
        PublicKey publicKey = certificate.getPublicKey();

        FileInputStream fis = new FileInputStream(args[0]);
        byte[] fileBytes = new byte[(int) new File(args[0]).length()];
        int offset = 0;
        int numRead;
        while (offset < fileBytes.length && (numRead = fis.read(fileBytes, offset, fileBytes.length - offset)) >= 0) {
            offset += numRead;
        }
        fis.close();

        byte[] p7sBytes = Array.readFile(args[1]);
        PKCS7 p7 = new PKCS7(p7sBytes);
        SignerInfo[] si = p7.getSignerInfos();

        if (null != p7.getContentInfo().getData()) {
            fileBytes = p7.getContentInfo().getData(); // <------- здесь валится
        }


При попытке декодировать подпись используя JCP API также программа валится со следующей ошибкой:

com.objsys.asn1j.runtime.Asn1MissingRequiredException: ASN.1 decode error @ offset 257:
SEQUENCE or SET is missing a required element.
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.SignedData.decode(SignedData.java:171)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:137)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:15)
at com.geminisystems.cryptopro.VerifyP7s.cmsVerify(VerifyP7s.java:78)
at com.geminisystems.cryptopro.VerifyP7s.main(VerifyP7s.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)
Exception in thread "main" com.objsys.asn1j.runtime.Asn1Exception: table constraint: content decode failed
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:141)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:15)
at com.geminisystems.cryptopro.VerifyP7s.cmsVerify(VerifyP7s.java:78)
at com.geminisystems.cryptopro.VerifyP7s.main(VerifyP7s.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)

Вот код для этого случая:
Код:

        byte[] buffer = Array.readFile(args[1]);
        final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(buffer);
        final ContentInfo all = new ContentInfo();
        all.decode(asnBuf); <----------------------------- здесь валится


Причем вариант использования JCP API валится как для случая с включенным контентом, так и для отдельной подписи.

Что мы делаем не так?

Примеры подписей попробую приаттачить

Отредактировано пользователем 1 ноября 2010 г. 19:15:24(UTC)  | Причина: Не указана

Вложение(я):
boot.ini.sig (1kb) загружен 34 раз(а).
boot.ini.separate.sig (1kb) загружен 25 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Iva  
#2 Оставлено : 27 октября 2010 г. 19:09:30(UTC)
Iva

Статус: Активный участник

Группы: Участники
Зарегистрирован: 09.10.2008(UTC)
Сообщений: 181

Скачайте новую версию, на Вашем примере работает.
Offline omikheev  
#3 Оставлено : 27 октября 2010 г. 21:41:47(UTC)
omikheev

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

Группы: Участники
Зарегистрирован: 22.10.2010(UTC)
Сообщений: 6
Откуда: SPb

Iva написал:
Скачайте новую версию, на Вашем примере работает.


А новую версию чего именно? JDK, CryptoArm, CSP или JCP?
Offline Iva  
#4 Оставлено : 27 октября 2010 г. 21:45:56(UTC)
Iva

Статус: Активный участник

Группы: Участники
Зарегистрирован: 09.10.2008(UTC)
Сообщений: 181

JCP.
Раздел форума про него.
Offline omikheev  
#5 Оставлено : 27 октября 2010 г. 22:02:14(UTC)
omikheev

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

Группы: Участники
Зарегистрирован: 22.10.2010(UTC)
Сообщений: 6
Откуда: SPb

Мы скачали версию JCP 1.0.47

Создали следующий класс:

Код:
public class Q {
    public static void main(String[] args) throws Exception {
        byte[] p7sBytes = Array.readFile("/tmp/arm/boot.ini.sig");
        final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(p7sBytes);
        final ContentInfo all = new ContentInfo();
        all.decode(asnBuf);
        System.out.println("all.content = " + all.content); <------- здесь валится
    }
}


boot.ini.sig - тот что приаттачен

Это все счастье валится с такой же ошибкой что и раньше:

com.objsys.asn1j.runtime.Asn1MissingRequiredException: ASN.1 decode error @ offset 257:
SEQUENCE or SET is missing a required element.
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.SignedData.decode(SignedData.java:171)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:137)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:15)
at Q.main(Q.java:15)
Exception in thread "main" com.objsys.asn1j.runtime.Asn1Exception: table constraint: content decode failed
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:141)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:15)
at Q.main(Q.java:15)
Offline Iva  
#6 Оставлено : 28 октября 2010 г. 20:11:58(UTC)
Iva

Статус: Активный участник

Группы: Участники
Зарегистрирован: 09.10.2008(UTC)
Сообщений: 181

Работает. Установил чистую Java, поставил JCP, запустил Ваш пример. Работает.
Может где-то осталась старая библиотека?
Проверяйте, что установили новый JCP в ту Java, которую запускаете.
Код:

import com.objsys.asn1j.runtime.Asn1BerDecodeBuffer;
import ru.CryptoPro.JCP.tools.Array;
import ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo;
import java.io.File;
import java.security.*;

public class Q{
public static void main(String[] args) throws Exception{
    String name = (args == null || args.length == 0) ? "C:\\Tmp\\boot.ini.sig" : args[0];
    byte[] p7sBytes = Array.readFile(name);
    Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(p7sBytes);
    ContentInfo all = new ContentInfo();
    all.decode(asnBuf);
    System.out.println("all.content = " + all.content);
    
    String url = ContentInfo.class.getProtectionDomain().getCodeSource().getLocation().getFile();
    System.out.println("file = " + url);
    System.out.println("length = " + new File(url).length());
    if(new File(url).length() != 794806)
        throw new Exception("!= 794806");
}
}

all.content = ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.SignedData@108786b
file = /D:/Java/jdk6_22_jcp/jre/lib/ext/JCP_ASN.jar
length = 794806
Если не работает, высылайте подробности на support@cryptopro.ru.
Какая платформа, какая Java, как запускаете.
Offline omikheev  
#7 Оставлено : 28 октября 2010 г. 21:02:19(UTC)
omikheev

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

Группы: Участники
Зарегистрирован: 22.10.2010(UTC)
Сообщений: 6
Откуда: SPb

Iva написал:

Проверяйте, что установили новый JCP в ту Java, которую запускаете.


Тысяча извинений, скачанный новый JCP забыл инсталлировать в JDK
После инсталляции действительно проблема ушла
Спасибо!
Offline RangerX  
#8 Оставлено : 10 ноября 2012 г. 14:19:43(UTC)
RangerX

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

Группы: Участники
Зарегистрирован: 03.04.2012(UTC)
Сообщений: 9
Мужчина

Здравствуйте. У меня в данный момент та же проблема. JCP последний (1.0.53)
Код:
Код:

        final byte[] signdata = Array.readFile("d:\\Progs\\Jetty\\1352479954410.raw");

        Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(signdata);
        ContentInfo all = new ContentInfo();
        String url = ContentInfo.class.getProtectionDomain().getCodeSource().getLocation().getFile();
        System.out.println(url);
        all.decode(asnBuf);
        System.out.println("all.content = " + all.content);


Результат:
Код:

/D:/Progs/Java/jdk1.6.0_25/jre/lib/ext/ASN1P.jar
com.objsys.asn1j.runtime.Asn1MissingRequiredException: ASN.1 decode error @ offset 3152:
SEQUENCE or SET is missing a required element.
	at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.SignedData.decode(SignedData.java:171)
	at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:137)
	at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
	at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:218)
	at MyCMSVerify.main(MyCMSVerify.java:62)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Exception in thread "main" com.objsys.asn1j.runtime.Asn1Exception: table constraint: content decode failed
	at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:141)
	at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
	at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:218)
	at MyCMSVerify.main(MyCMSVerify.java:62)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)


P.S. Проверка файла через csptest и http://notary.cryptopro.ru/Verify.aspx проходит успешно

Отредактировано пользователем 10 ноября 2012 г. 14:32:04(UTC)  | Причина: Не указана

Вложение(я):
1352479954410.raw (4kb) загружен 4 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Андрей Писарев  
#9 Оставлено : 10 ноября 2012 г. 16:44:38(UTC)
Андрей *

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

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

Сказал «Спасибо»: 550 раз
Поблагодарили: 2230 раз в 1739 постах
Файл с присоединенной ЭЦП с помощью какого ПО создавали, в какой ОС и криптопровайдере?



Отредактировано пользователем 10 ноября 2012 г. 17:40:44(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#10 Оставлено : 10 ноября 2012 г. 16:53:48(UTC)
Андрей *

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

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

Сказал «Спасибо»: 550 раз
Поблагодарили: 2230 раз в 1739 постах
Возможно будет интересным.... Anxious

подписал извлеченный xml файл (2 228 байт), сохранил с присоединенной ЭЦП,
сравниваю с имеющимся 1352479954410.raw

у меня:
Цитата:
34 30 NDEF: . . . SEQUENCE {
36 06 9: . . . . OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
47 A0 NDEF: . . . . [0] {
49 24 NDEF: . . . . . OCTET STRING {
51 04 2228: . . . . . . OCTET STRING - размер подписанных данных = ОК
: . . . . . . . 3C 3F 78 6D 6C 20 76 65 <?xml ve
: . . . . . . . 72 73 69 6F 6E 3D 22 31 rsion="1

.....
: . . . . . . . 75 63 74 3E 0A 0A 0A 3C uct>...<
: . . . . . . . 2F 6E 62 63 68 53 63 6F /nbchSco
: . . . . . . . 72 69 6E 67 52 65 70 6F ringRepo
: . . . . . . . 72 74 3E 0A rt>.
: . . . . . . }
: . . . . . }
: . . . . }
2289 A0 2796 : . . . [0] {
2293 30 1095: . . . . SEQUENCE {
2297 30 1012: . . . . . SEQUENCE {
2301 A0 3: . . . . . . [0] {
2303 02 1: . . . . . . . INTEGER 2
: . . . . . . . }
2306 02 16: . . . . . . INTEGER



.......
а в исходном 1352479954410.raw:

Цитата:

34 30 NDEF: . . . SEQUENCE {
36 06 9: . . . . OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
47 A0 NDEF: . . . . [0] {
49 24 NDEF: . . . . . OCTET STRING {
51 04 1000: Think . . . . . . OCTET STRING - другой размер...
: . . . . . . . 3C 3F 78 6D 6C 20 76 65 <?xml ve
: . . . . . . . 72 73 69 6F 6E 3D 22 31 rsion="1
....

: . . . . . . . 65 78 74 3E 0A 3C 62 69 ext>.<bi
: . . . . . . . 72 74 68 44 74 3E 31 39 rthDt>19
: . . . . . . . 36 39 2D 31 31 2D 30 39 69-11-09
: . . . . . . . 2B 30 34 3A 30 30 3C 2F
1055 04 1000: . . . . . . OCTET STRING
: . . . . . . . 62 69 72 74 68 44 74 3E birthDt>
: . . . . . . . 0A 3C 70 6C 61 63 65 4F .<placeO
: . . . . . . . 66 42 69 72 74 68 3E CD fBirth>.


: . . . . . . . 3E 0A 3C 67 72 6F 75 70 >.<group
: . . . . . . . 73 3E 3C 2F 67 72 6F 75
2059 04 228: . . . . . . OCTET STRING
: . . . . . . . 70 73 3E 0A 3C 69 6E 71 ps>.<inq

.....

: . . . . . . . 2F 6E 62 63 68 53 63 6F /nbchSco
: . . . . . . . 72 69 6E 67 52 65 70 6F ringRepo
: . . . . . . . 72 74 3E 0A rt>.
: . . . . . . }
: . . . . . }
: . . . . }
2296 A0 NDEF: Think Think Think . . . [0] {
2298 30 865: . . . . SEQUENCE {
2302 30 784: . . . . . SEQUENCE {
2306 A0 3: . . . . . . [0] {




"Вывод" - Блоками по 1000 байт?

Отредактировано пользователем 10 ноября 2012 г. 17:26:03(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.