Статус: Участник
Группы: Участники
Зарегистрирован: 11.07.2012(UTC) Сообщений: 12 Откуда: Саяногорск
|
Добрый день
Начальник поставил задачу автоматизировать процесс. 1.Надо файл подписать и сохранить в "p7s" и ключь должен быть отдельно. 2.Заархивировать 3.Зашифровать 4.И снова заархивировать
Пишу на DELPHI
В пунктах 1 и 3 естественно плаваю и тупею. Прочитал много тем кое, что понятно но несовсем. Для пункта 1 подписать файл ЭЦП со следующими параметрами: - указать в качестве выходного формата PKCS#7 Signature в DER-кодировке (.p7s или .sig) - в параметрах ЭЦП выбрать опцию «Сохранить ЭЦП в отдельном файле» - в качестве сертификата ЭЦП выбрать свой сертификат 1.я правильно понимаю что PKCS#7 Signature это MY_ENCODING_TYPE = PKCS_7_ASN_ENCODING or X509_ASN_ENCODING; SigParams.dwMsgEncodingType := MY_ENCODING_TYPE; а расширение файла p7s я сам подставляю? 2.что такое DER-кодировке? как установить 3.где настроить сохранение ключа в отдельном файле? 4.Выбрать свой сертификат это имеется ввиду ключь? (у этих файлов расширение p7b или это из списка)
Для пункта 3 зашифровать ZIP-архив со следующими параметрами: - указать в качестве выходного формата PKCS#7 Message в DER-кодировке (.p7m или .enc) - в свойствах шифрования указать свой сертификат, а в списке сертификатов получателей выбрать сертификат «Оператор» тут тоже все на раскоряку туплю. Но думаю надо сначало 1 пункт решить а уже потом 3
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Цитата:1.Надо файл подписать и сохранить в "p7s" и ключь должен быть отдельно. 2.Заархивировать 3.Зашифровать 4.И снова заархивировать пункт 4 - не имеет смысла, сжатия не будет |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.07.2012(UTC) Сообщений: 12 Откуда: Саяногорск
|
Андрей * написал:Цитата:1.Надо файл подписать и сохранить в "p7s" и ключь должен быть отдельно. 2.Заархивировать 3.Зашифровать 4.И снова заархивировать пункт 4 - не имеет смысла, сжатия не будет Так они хотят, им видней. Я тоже был в ах...е от этих действий, там еще в конце ложно быть так КодУчастника_ГГГГММДД_ЧЧММСС.zip.p7m
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Bolt написал:
В пунктах 1 и 3 естественно плаваю и тупею. Прочитал много тем кое, что понятно но несовсем. Для пункта 1 подписать файл ЭЦП со следующими параметрами: - указать в качестве выходного формата PKCS#7 Signature в DER-кодировке (.p7s или .sig) - в параметрах ЭЦП выбрать опцию «Сохранить ЭЦП в отдельном файле» - в качестве сертификата ЭЦП выбрать свой сертификат 1.я правильно понимаю что PKCS#7 Signature это MY_ENCODING_TYPE = PKCS_7_ASN_ENCODING or X509_ASN_ENCODING; SigParams.dwMsgEncodingType := MY_ENCODING_TYPE; а расширение файла p7s я сам подставляю?
да Цитата:2.что такое DER-кодировке? как установить см. пункт 1 - уже будет в ней Цитата: 3.где настроить сохранение ключа в отдельном файле?
Обычно сертификат (содержащий открытый ключ) сохраняется в pkcs7, для этого стандарт и существует... достаточно заполнить структуру Цитата: 4.Выбрать свой сертификат это имеется ввиду ключь? (у этих файлов расширение p7b или это из списка)
сертификат обычно выбирают из установленных в системе, из хранилища Личные... и имеющих ссылку на закрытый ключ... p.s. какую обертку используешь (над CryptoAPI) ? надеюсь не WCrypt2 ? Отредактировано пользователем 11 июля 2012 г. 15:45:35(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.07.2012(UTC) Сообщений: 12 Откуда: Саяногорск
|
Андрей * написал:Bolt написал:
В пунктах 1 и 3 естественно плаваю и тупею. Прочитал много тем кое, что понятно но несовсем. Для пункта 1 подписать файл ЭЦП со следующими параметрами: - указать в качестве выходного формата PKCS#7 Signature в DER-кодировке (.p7s или .sig) - в параметрах ЭЦП выбрать опцию «Сохранить ЭЦП в отдельном файле» - в качестве сертификата ЭЦП выбрать свой сертификат 1.я правильно понимаю что PKCS#7 Signature это MY_ENCODING_TYPE = PKCS_7_ASN_ENCODING or X509_ASN_ENCODING; SigParams.dwMsgEncodingType := MY_ENCODING_TYPE; а расширение файла p7s я сам подставляю?
да Цитата:2.что такое DER-кодировке? как установить см. пункт 1 - уже будет в ней Цитата: 3.где настроить сохранение ключа в отдельном файле?
Обычно сертификат (содержащий открытый ключ) сохраняется в pkcs7, для этого стандарт и существует... достаточно заполнить структуру Цитата: 4.Выбрать свой сертификат это имеется ввиду ключь? (у этих файлов расширение p7b или это из списка)
сертификат обычно выбирают из установленных в системе, из хранилища Личные... и имеющих ссылку на закрытый ключ... p.s. какую обертку используешь (над CryptoAPI) ? надеюсь не WCrypt2 ? Планирую использовать JwaWinCrypt он новее чем WCrypt2. 3.Да я тоже вычитал что ключь хранят в файле но тут хотят отдельно. 4.Тут пока туплю по полной. Перечитывал статью но пока недошло я так понимаю CryptAcquireContext(@Prov,nil,nil,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT); ... CryptReleaseContext(Prov,0); это будет обязательным далее в середине надо открыть файл идалее снова плаваю какой ключь что и как Отредактировано пользователем 11 июля 2012 г. 16:02:33(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.07.2012(UTC) Сообщений: 12 Откуда: Саяногорск
|
Bolt написал: Планирую использовать JwaWinCrypt он новее чем WCrypt2. 3.Да я тоже вычитал что ключь хранят в файле но тут хотят отдельно. 4.Тут пока туплю по полной. Перечитывал статью но пока недошло
я так понимаю CryptAcquireContext(@Prov,nil,nil,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT); ... CryptReleaseContext(Prov,0); это будет обязательным далее в середине надо открыть файл идалее снова плаваю какой ключь что и как
И так сертификаты пролистываю нахожу, код подписания будет приблезительно такой: Код:try
if ( not assigned( pSignerCert )) then
Err( Format( 'Сертификат %s не найден', [ SignerName ] ));
pStreamIn := TMemoryStream.Create;
pStreamOut := TMemoryStream.Create;
try
pStreamIn.LoadFromFile( 'd:\test.txt' );
GetMem( MessageArray, 1 * SizeOf( PByte ));
GetMem( MessageSize, 1 * SizeOf( DWORD ));
GetMem( MessageCert, 1 * SizeOf( PAPCCERT_CONTEXT ));
MessageArray[ 1 ] := pStreamIn.Memory;
MessageSize[ 1 ] := pStreamIn.Size;
MessageCert[ 1 ] := pSignerCert;
FillChar( SigParams, SizeOf( CRYPT_SIGN_MESSAGE_PARA ), #0 );
SigParams.cbSize := SizeOF( CRYPT_SIGN_MESSAGE_PARA );
SigParams.dwMsgEncodingType := MY_ENCODING_TYPE;
SigParams.pSigningCert := pSignerCert;
SigParams.HashAlgorithm.pszObjId := szOID_RSA_MD5;
SigParams.cMsgCert := 1;
SigParams.rgpMsgCert := MessageCert;
if not ( CryptSignMessage( @SigParams, false, 1, MessageArray, MessageSize, nil, cbSignedMessageBlob )) then
Err( 'Размер буфера' );
pStreamOut.Size := cbSignedMessageBlob;
if not ( CryptSignMessage( @SigParams, false, 1, MessageArray, MessageSize, pStreamOut.Memory, cbSignedMessageBlob )) then
Err( 'Файл не подписан' );
pStreamOut.Size := cbSignedMessageBlob;
pStreamOut.SaveToFile( 'd:\test.sig' );
Memo.Lines.Add( 'Файл подписан' );
finally
FreeAndNil( pStreamIn );
FreeAndNil( pStreamOut );
end;
finally
CertFreeCertificateContext(pSignerCert);
end;
КАК СОХРАНИТЬ ОТДЕЛЬНО КЛЮЧЬ?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Ключ брать тут (есть же... поиск, я не про интернет, а про поиск по структурам в jwawincrypt)Certificate.pCertInfo.SubjectPublicKeyInfo.PublicKey Цитата: КАК СОХРАНИТЬ ОТДЕЛЬНО КЛЮЧЬ?
в Help: работа с файлами... также элементарно, как и имея указатель на участок памяти и ее размер... или здесь проблемы? Отредактировано пользователем 16 июля 2012 г. 12:09:01(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Цитата:3.Да я тоже вычитал что ключь хранят в файле но тут хотят отдельно. Bolt, надеюсь ты уточнил у заказчика за это время, открытый ключ нужен или все таки сертификат (содержащий открытый ключ) ? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.07.2012(UTC) Сообщений: 12 Откуда: Саяногорск
|
Андрей * написал:Цитата:3.Да я тоже вычитал что ключь хранят в файле но тут хотят отдельно. Bolt, надеюсь ты уточнил у заказчика за это время, открытый ключ нужен или все таки сертификат (содержащий открытый ключ) ? Заказчик отправил к конторе которая дала требование я им воросы задал и они молчат уже неделю. Дурдом. Я теперь пытаюсь сам разобраться и подсунуть им файл.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Bolt написал: SigParams.HashAlgorithm.pszObjId := szOID_RSA_MD5; как это относится к КРИПТО-ПРО \СКЗИ\ Встраивание не понятно |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close