Подскажите пожалуйста:
У меня есть сертификат *.cer, пытаюсь получить ЭЦП сообщения, но выдается ошибка: The signers sertificate is not valid for signing
что не так я сделал или что не так с сертификатом:
use strict;
use Win32::OLE;
use Win32::OLE::Const;
use Data::Dumper;
my $Store = Win32::OLE->new('CAPICOM.Store')or warn Win32::OLE->LastError();
my $Signer = Win32::OLE->new('CAPICOM.Signer');
my $SigningTime = Win32::OLE->new('CAPICOM.Attribute');
my $const = Win32::OLE::Const->Load($Signer);
$Store->Open($const->{CAPICOM_CURENT_USER_STORE}, $const->{CAPICOM_MY_STORE}, $const->{CAPICOM_STORE_OPEN_READ_ONLY})
or warn Win32::OLE->LastError();
#Ищу нужный сертификат
my $Certificates = $Store->{'Certificates'}->Find($const->{CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME},'S_001');
my $Enum = Win32::OLE::Enum->new( $Certificates );
my @Certs = $Enum->All;
die "No certificates" unless @Certs;
foreach(@Certs) {
$Signer->LetProperty('Certificate', $_) or warn Win32::OLE->LastError();
last;
}
die "No certificates" unless $Signer->{'Certificate'};
$SigningTime->Name ($const->{CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME});
$SigningTime->Value (time());
$Signer->AuthenticatedAttributes->Add( $SigningTime );
my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or warn Win32::OLE->LastError();
$SignedData->{'Content'} = "some text" or warn Win32::OLE->LastError();
my $sign = $SignedData->Sign($Signer, 1, $const->{CAPICOM_ENCODE_BASE64}) or warn Win32::OLE->LastError();
print ( "\n$sign\n" );
Re: CAPICOM & Perl
От:
Аноним
Дата:
30.06.09 02:00
Оценка:
Здравствуйте, 121grn, Вы писали:
1>Подскажите пожалуйста: 1>У меня есть сертификат *.cer, пытаюсь получить ЭЦП сообщения, но выдается ошибка: The signers sertificate is not valid for signing 1>что не так я сделал или что не так с сертификатом:
Скорее всего сертификат не предназначен для подписывания, то есть у него в Usages нет флага CU_KP_DOCUMENT_SIGNING и/или CU_KP_TIME_STAMP_SIGNING. Посмотрите свойства сертификата — в проводнике или с помощью CryptUIDlgViewContext, там на первой вкладке будет список предназначений.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 121grn, Вы писали:
1>>Подскажите пожалуйста: 1>>У меня есть сертификат *.cer, пытаюсь получить ЭЦП сообщения, но выдается ошибка: The signers sertificate is not valid for signing 1>>что не так я сделал или что не так с сертификатом:
А>Скорее всего сертификат не предназначен для подписывания, то есть у него в Usages нет флага CU_KP_DOCUMENT_SIGNING и/или CU_KP_TIME_STAMP_SIGNING. Посмотрите свойства сертификата — в проводнике или с помощью CryptUIDlgViewContext, там на первой вкладке будет список предназначений.
Я посмотрел свойства сертификата: "Подтверждает удаленному компьютеру идентификацию вашего компьютера". Как то можно с помощью такого сертификата получить ЭЦП?
Re[3]: CAPICOM & Perl
От:
Аноним
Дата:
30.06.09 02:48
Оценка:
Здравствуйте, 121grn, Вы писали:
1>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, 121grn, Вы писали:
1>>>Подскажите пожалуйста: 1>>>У меня есть сертификат *.cer, пытаюсь получить ЭЦП сообщения, но выдается ошибка: The signers sertificate is not valid for signing 1>>>что не так я сделал или что не так с сертификатом:
А>>Скорее всего сертификат не предназначен для подписывания, то есть у него в Usages нет флага CU_KP_DOCUMENT_SIGNING и/или CU_KP_TIME_STAMP_SIGNING. Посмотрите свойства сертификата — в проводнике или с помощью CryptUIDlgViewContext, там на первой вкладке будет список предназначений.
1>Я посмотрел свойства сертификата: "Подтверждает удаленному компьютеру идентификацию вашего компьютера". Как то можно с помощью такого сертификата получить ЭЦП?
Боюсь, что нет, CAPICOM вряд-ди это позволит. Используя CryptoApi можно было бы попробовать, но это было-бы явным отступлентем от стандарта, я не пробовал и Вам бы не советовал.