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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline poltora  
#11 Оставлено : 30 апреля 2008 г. 21:47:36(UTC)
poltora

Статус: Участник

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

Kirill Sobolev написал:
"poltora" написал:
получается, что я указываю не проверять на отзыв сертификат и получаю ошибку - "сертификат не удалось проверить на отзыв" ???

а с чего Вы взяли что в 1м примере у вас ошибка проверки на отзыв?

я говорил уже про 3тий пример :)

Kirill Sobolev написал:

"poltora" написал:
или у меня неверный сертификат. или я проверяю неверно.

я думаю у вас просто нет локально установленного CRL


понятно. т.е. сертификат будет считаться валидным, если он пройдет все проверки, в том числе и на отозванность.
значит, если нам ненужно проверять на отозванность - мы не должны опираться на Certificate.IsValid() а сами определить по
Certificate.IsValid().CheckFlag(...).Result() тот нужный нам уровень "валидности"...


вернусь к первому примеру.
проверка на валидность тут же сгенерированной подписи не проходит - даже если 2ым параметром в вызове SignedData.Sign передать false

не потому ли проверка на валидность ПОДПИСИ не успешна, потому что, сертификат не является валидным, (т.к., по всей вероятности, он не может быть проверен по спискам отзывов)?
хотя я и указываю CAPICOM_VERIFY_SIGNATURE_ONLY в вызове SignedData.Verify()

в чем може быть причина не валидности тут же сгенерированной подписи.
разве такое вообще возможно?

Offline Kirill Sobolev  
#12 Оставлено : 4 мая 2008 г. 15:34:01(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Раз проверка проходит для кода на одном скрипте и не проходит для кода на другом - то видимо проблема не в сертификатах, а именно в этом коде.
Техническую поддержку оказываем тут
Наша база знаний
Offline poltora  
#13 Оставлено : 7 мая 2008 г. 18:39:29(UTC)
poltora

Статус: Участник

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

Kirill Sobolev написал:
Раз проверка проходит для кода на одном скрипте и не проходит для кода на другом - то видимо проблема не в сертификатах, а именно в этом коде.

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

Kirill Sobolev написал:
я думаю у вас просто нет локально установленного CRL

это скорее всего так и возможно в этом причина долгого срабатывания верификации подписи - возможный таймаут. вопрос - как его установить или может есть возможность указать не использовать CRL при верификации? (CAPICOM_VERIFY_SIGNATURE_ONLY - по всей видимости не помогает...)

но тогда почему пример на javascript отрабатывает успешно и быстро? или он не обращается к CRL?

Отредактировано пользователем 7 мая 2008 г. 18:40:09(UTC)  | Причина: Не указана

Offline poltora  
#14 Оставлено : 7 мая 2008 г. 19:05:36(UTC)
poltora

Статус: Участник

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

различными теловижениями выяснилось, что код на perl, что код на javascript при проверке сертификата

Цитата:
Certificate.IsValid().CheckFlag
Certificate.IsValid().Result
Chain.Build(Certificate)


ОДИНАКОВО срабатывают на CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN

видимо вы правы, отсутствие CRL портит карму. (хотя попрежнему я не понимаю, огромную разницу в скорости работы perl и javascript)


Offline Kirill Sobolev  
#15 Оставлено : 7 мая 2008 г. 20:03:53(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
возможно, дело в механике вызова перлом СОМ объектов
Техническую поддержку оказываем тут
Наша база знаний
Offline poltora  
#16 Оставлено : 7 мая 2008 г. 20:50:42(UTC)
poltora

Статус: Участник

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

в VSDN дается описание SignedData.Verify (http://msdn.microsoft.com/en-us/library/aa387728(VS.85).aspx)
в частности: If this method fails, an error will be thrown. The Err object will contain additional information about the error.

т.е. если верификация НЕ прошла - то выдается исключение.

механизм работы с исключениями в perl - это eval-блок, т.е. заключив SignedData.Verify в eval мы должны перехватывать исключения:
Цитата:

sub isValidSignature($$) {
my $data = shift;
my $signature = shift;

my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Cannot start CAPICOM.SignedData";
$SignedData->LetProperty( 'Content', $data );

eval {
$SignedData->Verify( $signature, 1, CAPICOM_VERIFY_SIGNATURE_ONLY );
};
if ($@) {
return 0;
}
return 1;
}


но! в данном примере, никакие исключения не перехватываются.

может ли кто подсказать, в чем причина и какой есть выход из ситуации?
Offline poltora  
#17 Оставлено : 7 мая 2008 г. 21:28:27(UTC)
poltora

Статус: Участник

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

нашел решение.
Win32::OLE->LastError()

Offline Andrey  
#18 Оставлено : 25 июня 2008 г. 22:21:14(UTC)
Andrey

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

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

poltora написал:
нашел решение.
Win32::OLE->LastError()


Получилось ли проверить подпись ?

постоянно вылетает ошибка
Win32::OLE(0.1707) error 0x8002000e: "Invalid number of parameters"
in METHOD/PROPERTYGET "Item"
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.