Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2012(UTC) Сообщений: 119   Откуда: Digital Design Сказал «Спасибо»: 19 раз Поблагодарили: 1 раз в 1 постах
|
У меня такая проблема: в своём приложении для добаления УЭЦП я использовал функцию CadesMsgAddEnhancedSignature(). Но в ТЗ у меня написано, что если сервера TSP или OCSP недоступны, то нужно добавить сначала обычную ЭЦП, а потом, при восстановлении подключения, дополнить её до усовершенствованной. Возможно ли такое сделать, и если да, то как? Просто я не нашел у вас в руководстве функции добавления обычной ЭЦП. Отредактировано пользователем 13 июня 2012 г. 19:55:18(UTC)
| Причина: Не указана |
ВАСИЛИЙ АНИСИМОВ Ведущий iOS разработчик в «Digital Design» www.digdes.ru |
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.02.2008(UTC) Сообщений: 1,491 Откуда: Крипто-Про
Поблагодарили: 40 раз в 37 постах
|
Обычную ЭЦП можно сделать при помощи API CAPILite, аналогичного CryptoAPI от Microsoft. CAPILite делает подписи в формате cades bes, который можно дополнить до УЭЦП. |
Татьяна ООО Крипто-Про |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2012(UTC) Сообщений: 119   Откуда: Digital Design Сказал «Спасибо»: 19 раз Поблагодарили: 1 раз в 1 постах
|
А добавляется ещё одна подпись так же, как и при подписании сообщения впервые? А, да, и что с автономным режимом у удостоверяющей подписи? Отредактировано пользователем 13 июня 2012 г. 22:09:23(UTC)
| Причина: Не указана |
ВАСИЛИЙ АНИСИМОВ Ведущий iOS разработчик в «Digital Design» www.digdes.ru |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2012(UTC) Сообщений: 119   Откуда: Digital Design Сказал «Спасибо»: 19 раз Поблагодарили: 1 раз в 1 постах
|
Мне нужно именно добавить к уже имеющейся УЭЦП (или ЭЦП) ещё одну ЭЦП, и я не очень понимаю алгоритм такого добавления. Помогите, пожалуйста. А, да, и если это воможно точно так же сделать с удостоверяющей подписью (возможность добавлять её в оффлайне, а потом дополнять до УЭЦП) Отредактировано пользователем 14 июня 2012 г. 14:30:15(UTC)
| Причина: Не указана |
ВАСИЛИЙ АНИСИМОВ Ведущий iOS разработчик в «Digital Design» www.digdes.ru |
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.02.2008(UTC) Сообщений: 1,491 Откуда: Крипто-Про
Поблагодарили: 40 раз в 37 постах
|
Если я правильно поняла что вы хотите, то порядок примерно такой:
CryptMsgOpenToDecode прочитать сообщение CryptMsgUpdate заполнить структуру SignerInfo, причем если сервер штампов времени доступен, то можно получить штамп и заполнить SignerInfo.cAuthAttr, SignerInfo.rgAuthAttr CryptMsgControl с параметром CMSG_CTRL_ADD_SIGNER сохранить полученное закодированное сообщение |
Татьяна ООО Крипто-Про |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2012(UTC) Сообщений: 119   Откуда: Digital Design Сказал «Спасибо»: 19 раз Поблагодарили: 1 раз в 1 постах
|
Сделал как вы написали, почему-то подпись добавляется дважды, не могу понять почему.. Код:
HCRYPTMSG hMsg = CryptMsgOpenToDecode(
TYPE_DER, // Encoding type.
CMSG_DETACHED_FLAG, // Flags.
0, // Use the default message type.
0,//hCryptProv, // Cryptographic provider.
0, // Recipient information.
0); // Stream information.
if (hMsg)
printf("The message to decode is open. \n");
else{
return [self handleError:"OpenToDecode failed" errorCode:0];
}
if(!CryptMsgUpdate(
hMsg, // Handle to the message
pSignaruteBlob->pbData,//signature_mem, // Pointer to the content
pSignaruteBlob->cbData,//signature_len, // Size of the content
TRUE)){
return [self handleError:"CryptMsgUpdate() 1 failed" errorCode:0];
}
if (!CryptMsgUpdate(
hMsg, // Handle to the message
pMessageBlob->pbData, // Pointer to the encoded blob
pMessageBlob->cbData, // Size of the encoded blob
TRUE)){ // Last call)
return [self handleError:"CryptMsgUpdate() 2 failed" errorCode:0];
}
printf("The encoded blob has been added to the message. \n");
CMSG_SIGNER_ENCODE_INFO SignerEncodeInfo = {sizeof(CMSG_SIGNER_ENCODE_INFO)};
SignerEncodeInfo.cbSize = sizeof(CMSG_SIGNER_ENCODE_INFO);
SignerEncodeInfo.pCertInfo = pUserCert->pCertInfo;
SignerEncodeInfo.hCryptProv = hCryptProv;
SignerEncodeInfo.dwKeySpec = keytype;
SignerEncodeInfo.HashAlgorithm = HashAlgorithm;
SignerEncodeInfo.pvHashAuxInfo = NULL;
...
printf("Adding signature to message\n");
if (!CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_SIGNER, &SignerEncodeInfo)){
return [self handleError:"CryptMsgControl() failed" errorCode:0];
}
...
pbEncodedBlob = (BYTE *) malloc(cbEncodedBlob);
...
if(CryptMsgGetParam(
hMsg, // Handle to the message
CMSG_ENCODED_MESSAGE, // Parameter type
0, // Index
pbEncodedBlob, // Pointer to the blob
&cbEncodedBlob)) // Size of the blob
{
printf("Message encoded successfully.\n");
} else {
return [self handleError:"MsgGetParam failed" errorCode:0];
}
printf("Простая подпись:\n");
for(DWORD i=0; i < cbEncodedBlob; i++)
{
printf("%2.2x", pbEncodedBlob[i]);
if ((i+1)%32 == 0) printf("\n");
}
if (outFilename) {
FILE *out = NULL;
out = fopen (outFilename, "wb");
if (out) {
fwrite (pbEncodedBlob, cbEncodedBlob, 1, out);
fclose (out);
cout << "Output file " << outFilename << " has been saved" << endl;
}
else
return [self handleError:"Cannot open out file" errorCode:ERROR_CANT_OPEN_OUTPUT_FILE];
}
return 0;
|
ВАСИЛИЙ АНИСИМОВ Ведущий iOS разработчик в «Digital Design» www.digdes.ru |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2012(UTC) Сообщений: 119   Откуда: Digital Design Сказал «Спасибо»: 19 раз Поблагодарили: 1 раз в 1 постах
|
И ещё к предыдущему - это нормально, что при проверке обычной ЭЦП ф-ия CadesMsgVerifySignature завершается с ошибкой 80070490 (не найден штамп времени, как писали в одном из топиков)? Тип подписи в структуре CADES_VERIFICATION_PARA выставлен CADES_BES. |
ВАСИЛИЙ АНИСИМОВ Ведущий iOS разработчик в «Digital Design» www.digdes.ru |
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 926  Откуда: Крипто-Про Поблагодарили: 101 раз в 96 постах
|
Цитата:Сделал как вы написали, почему-то подпись добавляется дважды, не могу понять почему.. То есть всего в документе получается 3 подписи? Исходная и 2 новых? Так быть не должно. Исходная подпись точно одна? Цитата:И ещё к предыдущему - это нормально, что при проверке обычной ЭЦП ф-ия CadesMsgVerifySignature завершается с ошибкой 80070490 (не найден штамп времени, как писали в одном из топиков)? Тип подписи в структуре CADES_VERIFICATION_PARA выставлен CADES_BES. Нет, не нормально. CAdES-BES не требует наличия штампа времени.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2012(UTC) Сообщений: 119   Откуда: Digital Design Сказал «Спасибо»: 19 раз Поблагодарили: 1 раз в 1 постах
|
По обоим комментариям - я понимаю, что так быть не должно и что-то не так :) Цитата:То есть всего в документе получается 3 подписи? Исходная и 2 новых? Так быть не должно. Исходная подпись точно одна? Да, точно одна. Мой лог такой: Цитата: Running function: addEnhancedSignatureToSignatute //ф-ия доьбавления подписи к имеющейся The message to decode is open. The encoded blob has been added to the message. Count of signers: 1 //кол-во подписей в сообщении Adding enchnced signature to message
Running function: handleError Error: CadesMsgAddEnhancedSignature() failed Error N c2100100 Adding signature to message Message encoded successfully.
Running function: verifyEnhancedDetachedSignature //ф-ия проверки подписи Count of signers: 3 //кол-во подписей в сообщении The message to decode is open. The encoded blob has been added to the message. The message parameter (CMSG_CONTENT_PARAM) has been acquired. Message size: 0 The message param (CMSG_CONTENT_PARAM) updated. Length is 0. A signer certificate has been retrieved.
Цитата:CAdES-BES не требует наличия штампа времени. Лог: Цитата: //ф-ии вывода сообщений об ошибках проверки, в обоих случаях ошибка одна и та же Running function: handleError Error: CadesMsgVerifySignature() (enhanced) failed //ошибка проверки УЭЦП Error N 80070490 The enhansed signature was NOT VEIFIED. Status: 9. //Код из pInfo->dwStatus; CADES_VERIFY_NO_VALID_CADES_C_TIMESTAMP
Running function: handleError Error: CadesMsgVerifySignature() failed //ошибка проверки ЭЦП Error N 80070490 Signature №0 was VERIFIED. Status: 9. //здесь то же самое, хотя я прописываю dwCadesType = CADES_BES ... Running function: cleanUp
|
ВАСИЛИЙ АНИСИМОВ Ведущий iOS разработчик в «Digital Design» www.digdes.ru |
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 926  Откуда: Крипто-Про Поблагодарили: 101 раз в 96 постах
|
Нужно смотреть код. Потому как вот это: Код:CadesMsgAddEnhancedSignature() failed
Error N c2100100
попытка добавить усовершенствованную подпись в сообщение. При этом сначала делается обычная подпись, которую потом не удается усовершенствовать (судя по всему из-за того, что сервер штампов времени недоступен). Сама подпись при этом никуда не исчезнет.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close