Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline AJIEKCAHDP  
#1 Оставлено : 24 сентября 2009 г. 14:39:18(UTC)
AJIEKCAHDP

Статус: Участник

Группы: Участники
Зарегистрирован: 04.06.2008(UTC)
Сообщений: 15

Добрый день.
Есть проблема при принятии запроса на УЦ (сам запрос на УЦ приходит нормально).

Ошибка номер: -2146893818
Источник: Request.GetCertificate
Описание: Ошибка при обработке запроса Неправильная подпись. 0x80090006 (-2146893818)

Ошибка не появляется при CSP v3.0, v3.6 (клиент), УЦ сборка 840.
Ошибка не появляется при CSP v3.0, УЦ сборка 857.
Ошибка возникает только при CSP v3.6, УЦ 857 сборка.

Самоподписанный запрос в любом случае обрабатывается нормально.
Подписывать запрос используя capicom не хотелось бы.

Подписанный запрос формируется программно.
Вот функция подписи:
int CCrypto::GetSignedCertRequest(LPSTR vpData, DWORD iDataSize, LPCSTR pCert, LPSTR &sreq, DWORD &dwSreq){
int iRes=CC_UNKNOWN_ERROR;
if (vpData==NULL || iDataSize==0 || strlen(pCert)==0)
iRes = CC_ARGUMENT_ERROR;
else
if(OpenCertificate("MY",pCert)!=CC_OK)
iRes = CC_CERT_NOT_OPEN;
else
if (CheckExpired()!=CC_OK)
iRes = CC_CERT_DATE_EXPIRED;
else{
CRYPT_SIGN_MESSAGE_PARA SigParams;
SigParams.cbSize=sizeof(SigParams);
SigParams.dwMsgEncodingType=CC_MY_TYPE;
SigParams.pSigningCert=pCertificate;
SigParams.HashAlgorithm.pszObjId=szOID_CP_GOST_R3411;
SigParams.HashAlgorithm.Parameters.cbData=NULL;
SigParams.cMsgCert=1;
SigParams.rgpMsgCert=&pCertificate;
SigParams.cAuthAttr=0;
SigParams.dwInnerContentType=0;
SigParams.cMsgCrl=0;
SigParams.cUnauthAttr=0;
SigParams.dwFlags=0;
SigParams.pvHashAuxInfo=NULL;
SigParams.rgAuthAttr=NULL;
BYTE *vpSignature=NULL;
DWORD iSignatureSize=0;

unsigned char *ddata = NULL;
int dwDdata=0;
CBase64::decode(vpData, ddata, dwDdata);

const unsigned char *MessageArray[]={ddata};
unsigned long MessageSizeArray[1]={dwDdata};

if(CryptSignMessage(&SigParams,FALSE,1,MessageArray,MessageSizeArray,vpSignature,&iSignatureSize)){
vpSignature = new BYTE[iSignatureSize];
if(!(CryptSignMessage(&SigParams,FALSE,1,MessageArray,MessageSizeArray,(unsigned char*)vpSignature,&iSignatureSize))){
iRes = CC_SIGN_ERROR;
delete []vpSignature;
}else{
sreq = (CHAR *)vpSignature;
dwSreq=iSignatureSize;
iRes=CC_OK;
}
}
delete []ddata;
}
FreeCertificate();
return iRes;
}

Вложение(я):
Requests.zip (4kb) загружен 15 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Kirill Sobolev  
#2 Оставлено : 24 сентября 2009 г. 15:41:43(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
подпись PKCS#7 проверяется и в том и в другом случае, так что в функции подписи проблем нет.
чем формируются вложенные PKCS#10 запросы?
Техническую поддержку оказываем тут
Наша база знаний
Offline AJIEKCAHDP  
#3 Оставлено : 24 сентября 2009 г. 15:57:21(UTC)
AJIEKCAHDP

Статус: Участник

Группы: Участники
Зарегистрирован: 04.06.2008(UTC)
Сообщений: 15

Самоподписанный запрос формируется при помощи xenroll.

int CCrypto::GetSelfSignedCertRequest(LPCSTR DN, LPCSTR EKU, LPCSTR ContName, LPSTR &data, DWORD &dwData){
CString cTemp;
BSTR bstrCont = NULL;
BSTR bstrDN = NULL;
BSTR bstrReq = NULL;
BSTR bstrOID = NULL;
BSTR bstrCSP = NULL;
ICEnroll4 * pEnroll = NULL;
HRESULT hr;
int iRes=CC_UNKNOWN_ERROR;

if (strlen(DN)==0 || strlen(EKU)==0 || strlen(ContName)==0)
{iRes = CC_ARGUMENT_ERROR;}
else
if (FAILED(hr = CoCreateInstance( __uuidof(CEnroll),NULL,CLSCTX_INPROC_SERVER,__uuidof(ICEnroll4),(void **)&pEnroll))){
iRes = CC_COM_ERROR;}
else {
cTemp = DN;
bstrDN = cTemp.AllocSysString();
cTemp = EKU;
bstrOID = cTemp.AllocSysString();
cTemp = ContName;
bstrCont = cTemp.AllocSysString();
cTemp = CSP.pszName;
bstrCSP = cTemp.AllocSysString();
pEnroll->put_ProviderName(bstrCSP);
pEnroll->put_ProviderType(CSP.dwType);
pEnroll->put_KeySpec(AT_KEYEXCHANGE);


pEnroll->put_ContainerName(bstrCont);
pEnroll->put_UseExistingKeySet(1);
if (!FAILED(hr = pEnroll->createPKCS10( bstrDN, bstrOID, &bstrReq))){
cTemp = _com_util::ConvertBSTRToString(bstrReq);
cTemp.Replace("\r\n","");
data = new CHAR[cTemp.GetLength()+1];
memcpy(data, cTemp.GetBuffer(),cTemp.GetLength()+1);
dwData = strlen(data);
SysFreeString(bstrReq);
iRes= CC_OK;
}else
iRes = CC_REQ_ERROR;
SysFreeString( bstrCSP );
SysFreeString( bstrCont );
SysFreeString( bstrDN );
SysFreeString( bstrOID );
pEnroll->Release();
}
return iRes;
}
Offline Kirill Sobolev  
#4 Оставлено : 24 сентября 2009 г. 16:08:45(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
и до вызова функции подписи полученный PKCS#10 проверяется скажем certutilом нормально, а потом появляется ошибка "Неправильная подпись"?
Техническую поддержку оказываем тут
Наша база знаний
Offline AJIEKCAHDP  
#5 Оставлено : 24 сентября 2009 г. 16:15:33(UTC)
AJIEKCAHDP

Статус: Участник

Группы: Участники
Зарегистрирован: 04.06.2008(UTC)
Сообщений: 15

Да.
Если через АРМ администратора я создаю новый сертификат, выбираю "чтение запроса из файла" и указываю самоподписанный запрос, то все OK.

А если указываю подписанный, то при тех же действиях "Мастер создания сертификата пользователя" выдает:
Номер: -2147220983
Источник: ViewRequestMoveNext
Описание: Произошла ошибка во время принятия запроса на сертификат.
Оригинальная ошибка:
Number=0x80090006
Source=Request.GetCertificate
Description=Ошибка при обработке запроса Неправильная подпись. 0x80090006 (-2146893818)
Вложение(я):
bad10.zip (1kb) загружен 11 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Kirill Sobolev  
#6 Оставлено : 24 сентября 2009 г. 16:58:06(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
А можно взглянуть на один и тот же плохой запрос PKCS#10, который принимает АРМ, до вызова функции подписи и после?
Техническую поддержку оказываем тут
Наша база знаний
Offline AJIEKCAHDP  
#7 Оставлено : 24 сентября 2009 г. 17:08:58(UTC)
AJIEKCAHDP

Статус: Участник

Группы: Участники
Зарегистрирован: 04.06.2008(UTC)
Сообщений: 15

OK.
Вложение(я):
req.ZIP (3kb) загружен 14 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Kirill Sobolev  
#8 Оставлено : 24 сентября 2009 г. 17:30:50(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Подпись самоподписанного запроса:
Цитата:
0000 43 dd f6 88 d6 e9 a0 d8 e2 c5 b7 3e bf a3 b5 c9
0010 08 97 f2 67 ad 78 08 49 fe 05 63 88 90 e0 82 c5
0020 8e f7 59 57 78 3b 0f b1 e9 5e f9 31 9a 54 b5 77
0030 6a 4c b4 91 3b eb 79 f8 41 1d 50 a3 b2 ac 05 8d

Подпись запроса, вытащенного из PKCS#7, который не проходит
Цитата:
0000 cd dd f6 88 d6 e9 a0 d8 e2 c5 b7 3e bf a3 b5 c9
0010 08 97 f2 67 ad 78 08 49 fe 05 63 88 90 e0 82 c5
0020 8e f7 59 57 78 3b 0f b1 e9 5e f9 31 9a 54 b5 77
0030 6a 4c b4 91 3b eb 79 f8 41 1d 50 a3 b2 ac 05 8d


где-то это запрос портится - может быть в CBase64::decode(vpData, ddata, dwDdata);?
Техническую поддержку оказываем тут
Наша база знаний
Offline AJIEKCAHDP  
#9 Оставлено : 24 сентября 2009 г. 17:43:04(UTC)
AJIEKCAHDP

Статус: Участник

Группы: Участники
Зарегистрирован: 04.06.2008(UTC)
Сообщений: 15

Кирилл, спасибо, возможно Вы правы. Сейчас буду смотреть
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.