Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ ОС и ПО _ Цифровая подпись

Автор: Unconnected 4.03.2010 1:36

Привет всем.

Столкнулся с проблемой, моя программа, написанная на Делфи, при запуске на компьютере с установленным KIS 2010 вызывает у него странную реакцию: антивирус кричит, что программа подозрительна, ибо у неё нету цифровой подписи. Хочу исправить, ибо человек нервничает. Так то программа вполне безобидная. Искал по сети, лишь в одной теме нашёл, что вроде бы в поставке Делфи есть утилита signtool для подписи, но там было довольно запутанно описано это всё.. Что посоветуете?..

Автор: volvo 4.03.2010 2:23

Цитата
вроде бы в поставке Делфи есть утилита signtool для подписи
blink.gif Вообще-то она от microsoft была всегда... Вот тут очень хорошо описано, как и что делать, чтоб подписать программу:
http://www.sql.ru/Forum/actualthread.aspx?tid=649104

Автор: Unconnected 4.03.2010 3:07

Я там и был, ну не сказал бы, что всё так уж хорошо описано.. 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 4.03.2010 4:29

Цитата
Это ж подпишет?
Чем ты подписывать собрался? У тебя сертификат есть?

Вот еще пара ссылок:
http://blogs.msdn.com/alejacma/archive/2008/02/20/how-to-sign-exe-files-with-an-authenticode-certificate-vb-net.aspx (тут VB.net)
http://blogs.msdn.com/alejacma/archive/2008/12/11/how-to-sign-exe-files-with-an-authenticode-certificate-part-2.aspx (VBScript/VB.net/VC++)

Вот еще один код, исправляющий баг в предыдущих: http://msdnrss.thecoderblogs.com/2010/02/17/signersignex-returns-error-0x80070020/ (С++)
Но вопрос остается открытым: Что у тебя с сертификатом? Все коды для того, чтобы подписать файл берут сертификат из контейнера. Но для этого его надо сначала туда положить smile.gif

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

Автор: Unconnected 4.03.2010 11:19

Ага, вот в том и дело, что нету у меня сертификата)) Кажется, я в той теме видел упоминание, что в папке делфи есть сертификат, и им можно подписать, мол, программа создана с помощью делфи..

Цитата

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


Наверное вариант №2, чего-то я по привычке не туда полез)

Автор: Unconnected 4.03.2010 18:44

Короче залез я в MSDN, нашёл как пользоваться SignTool, но сначала надо создать сертификат, якобы прогой MakeCert. Создаю - по примеру - никаких .cer-файлов в текущей папке не появляется.

Автор: Unconnected 5.03.2010 0:00

Проблема решилась, я просто сначала какой-то левый Makecert скачал..

Автор: Unconnected 5.03.2010 17:00

Блин! Не одно, так.. Подписывать-то получается, но в Свойста->Цифровые подписи написано, что мой сертификат какой-то там в корне непроверенный, и система на него подозрительно смотрит. Подписывал так:

makecert cert.cer
signtool signwizard

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

Извиняюсь за кросспостинг.

Автор: volvo 5.03.2010 17:08

Здесь был:
http://wiki.services.openoffice.org/wiki/%D0%9E%D0%9E%D0%BE_%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8:_%D0%9A%D0%B0%D0%BA_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%83%D1%8E_%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C_%D0%B2_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B5_%D0%9E%D0%9E%D0%BE#.D0.9A.D0.B0.D0.BA_.D0.BE.D1.82.D0.BD.D0.BE.D1.81.D0.B8.D1.82.D1.8C.D1.81.D1.8F_.D0.BA_.D1.81.D0.B5.D1.80.D1.82.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.82.D1.83 ?

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

Во - первых, меня порадовало объяснение:

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

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

Это соединение является недоверенным
Технические детали
www.cacert.org использует недействительный сертификат безопасности.
К сертификату нет доверия, так как сертификат его издателя неизвестен.
(Код ошибки: sec_error_unknown_issuer)
Что-то мне расхотелось после этого там регистрироваться, честно smile.gif

Автор: Unconnected 5.03.2010 22:34

Короче, ну их нафиг, этих касперских. Любая программа, написанная не майкрософтом или ещё какой-то фирмой, сразу попадает в область рискованных и потенциально опасных. Перебдели, однако.. Мне на форуме ихнем примерно то же сказали.
И это при том, что у меня есть .exe, который это каким-то образом обходит_)

На CACert был, зарегистрировался, но проблема в том, что пользователю нужно их сертификат устанавливать, а это лишние телодвижения. Будем пробовать нетрадиционные методы)

Автор: volvo 5.03.2010 22:50

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

Автор: Unconnected 6.03.2010 1:40

Цитата
Это только Виста подобным отличается...


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