Подскажите пожалуйста:
У меня есть сертификат *.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" );