Помощь - Поиск - Пользователи - Календарь
Полная версия: Цифровая подпись
Форум «Всё о Паскале» > Системы, Сети, Технологии > ОС и ПО
Unconnected
Привет всем.

Столкнулся с проблемой, моя программа, написанная на Делфи, при запуске на компьютере с установленным KIS 2010 вызывает у него странную реакцию: антивирус кричит, что программа подозрительна, ибо у неё нету цифровой подписи. Хочу исправить, ибо человек нервничает. Так то программа вполне безобидная. Искал по сети, лишь в одной теме нашёл, что вроде бы в поставке Делфи есть утилита signtool для подписи, но там было довольно запутанно описано это всё.. Что посоветуете?..
volvo
Цитата
вроде бы в поставке Делфи есть утилита signtool для подписи
blink.gif Вообще-то она от microsoft была всегда... Вот тут очень хорошо описано, как и что делать, чтоб подписать программу:
http://www.sql.ru/Forum/actualthread.aspx?tid=649104
Unconnected
Я там и был, ну не сказал бы, что всё так уж хорошо описано.. smile.gif SignTool нашёл в системе, только там же ещё файл сертификата надо, я так понял? И ещё, по ссылке человек выкладывал процедуру


uses MSSIGN32;

procedure Sing( const AFile : THandleSignFileInfo;
const Alg : ALG_ID; const ASPC, APVK, AURL : WideString ); overload;
const
CONST_COUNT : DWORD = 0;
var
Url : PWideChar;
SignerCert : SIGNER_CERT;
FileInfo : SIGNER_FILE_INFO;
SubjectInfo : SIGNER_SUBJECT_INFO;
ProviderInfo : SIGNER_PROVIDER_INFO;
SignatureInfo : SIGNER_SIGNATURE_INFO;
begin
CryptoPrepare( FileInfo, SizeOf( SIGNER_FILE_INFO ));
FileInfo.pwszFileName := PWideChar( AFile.Name );
FileInfo.hFile := AFile.Handle;

CryptoPrepare( SubjectInfo, SizeOf( SIGNER_SUBJECT_INFO ));
SubjectInfo.pdwIndex := @CONST_COUNT;
SubjectInfo.dwSubjectChoice := SIGNER_SUBJECT_FILE;
SubjectInfo.pSignerFileInfo := PSIGNER_FILE_INFO( @FileInfo );

CryptoPrepare( SignerCert, SizeOf( SIGNER_CERT ));
SignerCert.dwCertChoice := SIGNER_CERT_SPC_FILE;
SignerCert.Attribute.pwszSpcFile := PWideChar( ASPC );

CryptoPrepare( SignatureInfo, SizeOf( SIGNER_SIGNATURE_INFO ));
SignatureInfo.algidHash := Alg;

CryptoPrepare( ProviderInfo, SizeOf( SIGNER_PROVIDER_INFO ));
ProviderInfo.dwProviderType := 1;
ProviderInfo.dwPvkChoice := PVK_TYPE_FILE_NAME;
ProviderInfo.pwszPvkFileName := PWideChar( APVK );

Url := nil;
if AURL <> '' then
Url := PWideChar( AURL );

CryptoCheck( SignerSign( SubjectInfo, SignerCert, SignatureInfo,
@ProviderInfo, Url, nil, nil ));
end;


Это ж подпишет? И как входной параметр-хендл файла задать?
volvo
Цитата
Это ж подпишет?
Чем ты подписывать собрался? У тебя сертификат есть?

Вот еще пара ссылок:
How to sign EXE files with an Authenticode certificate (VB.NET) (тут VB.net)
How to sign EXE files with an Authenticode certificate (part 2) (VBScript/VB.net/VC++)

Вот еще один код, исправляющий баг в предыдущих: SignerSignEx returns error 0×80070020 (С++)
Но вопрос остается открытым: Что у тебя с сертификатом? Все коды для того, чтобы подписать файл берут сертификат из контейнера. Но для этого его надо сначала туда положить smile.gif

Что тема делает в разделе Дельфи? Тебе надо подписать файл используя Дельфи, либо подписать EXE-шник (просто созданный при помощи Дельфи) любым способом?
Unconnected
Ага, вот в том и дело, что нету у меня сертификата)) Кажется, я в той теме видел упоминание, что в папке делфи есть сертификат, и им можно подписать, мол, программа создана с помощью делфи..
Цитата

Тебе надо подписать файл используя Дельфи, либо подписать EXE-шник (просто созданный при помощи Дельфи) любым способом?


Наверное вариант №2, чего-то я по привычке не туда полез)
Unconnected
Короче залез я в MSDN, нашёл как пользоваться SignTool, но сначала надо создать сертификат, якобы прогой MakeCert. Создаю - по примеру - никаких .cer-файлов в текущей папке не появляется.
Unconnected
Проблема решилась, я просто сначала какой-то левый Makecert скачал..
Unconnected
Блин! Не одно, так.. Подписывать-то получается, но в Свойста->Цифровые подписи написано, что мой сертификат какой-то там в корне непроверенный, и система на него подозрительно смотрит. Подписывал так:

makecert cert.cer
signtool signwizard

Неужели без покупки сертификата нормально подписать (чтобы антивирус не ругался) не получится?

Извиняюсь за кросспостинг.
volvo
Здесь был:
Как создать цифровую подпись в документе ООо ?

Особое внимание обратить на 2 вещи:

Во - первых, меня порадовало объяснение:
Цитата
Представьте себе такую житейскую ситуацию, когда к директору авиакомпании в кабинет заходит его сосед Иванов, которого директор знает как облупленного (Иванов все жизнь работал таксистом) и протягивает заявление о приёме на работу в лётный состав. Иванов показывает директору сертификат, подписанный самим Ивановым. Вопрос – примет ли директор Иванова в лётчики?
smile.gif

А во-вторых, обрати внимание: при попытке зайти на тот самый CACert и зарегистрироваться, мне FireFox заявляет:
Цитата

Это соединение является недоверенным
Технические детали
www.cacert.org использует недействительный сертификат безопасности.
К сертификату нет доверия, так как сертификат его издателя неизвестен.
(Код ошибки: sec_error_unknown_issuer)
Что-то мне расхотелось после этого там регистрироваться, честно smile.gif
Unconnected
Короче, ну их нафиг, этих касперских. Любая программа, написанная не майкрософтом или ещё какой-то фирмой, сразу попадает в область рискованных и потенциально опасных. Перебдели, однако.. Мне на форуме ихнем примерно то же сказали.
И это при том, что у меня есть .exe, который это каким-то образом обходит_)

На CACert был, зарегистрировался, но проблема в том, что пользователю нужно их сертификат устанавливать, а это лишние телодвижения. Будем пробовать нетрадиционные методы)
volvo
Цитата
Любая программа, написанная не майкрософтом или ещё какой-то фирмой, сразу попадает в область рискованных и потенциально опасных.
Это только Виста подобным отличается... Я с этим не столкнулся, у меня Висты не было никогда. Но ни XP ни Win7 подобной паранойей не страдают...
Unconnected
Цитата
Это только Виста подобным отличается...


У меня тоже висты никогда не было:) Но я это "отличие" говорил про KIS.
К теме не относится, конечно.. Путём долгих экспериментов выяснилось, что KIS кричит, что цифровой подписи нет, не тогда, когда её просто нет, а тогда, когда ещё и сам файл кажется ему подозрительным. Если допустим попробовать запустить пустой проект (разумеется, неподписанный), то Оно молчит..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.