08.08.2007 14:24:23Не отравляется запрос на обновление Ответов: 8
Александр
Ответьте пожалуйста, почему при создании запросов на обновление, если указывать стандартный набор OID'ов, то запрос уходит. (1.2.643.2.2.34.6, 1.3.6.1.5.5.7.3.2, 1.3.6.1.5.5.7.3.4)

При попытке указать любой другой набор (полученный с AdminSoapPort.GetCertTemplates()) возникает ошибка при отправке(получении) запроса SubmitRequest() -- CryptDecodeObjectEx;
Номер: -2146881278
Источник: CPICom.CertRequest.1
Описание: CryptDecodeObjectEx

Если импортирую запросы на УЦ из файлов, тоже самое: самоподписанный проходит, подписанный нет.

В чем может быть дело?
 
Ответы:
08.08.2007 15:11:08Kirill Sobolev
А на код SOAP вызова можно взглянуть?
08.08.2007 15:22:22Александр
можно, но говорю же, что если импортирую запросы на УЦ из файлов, тоже самое: самоподписанный проходит, подписанный нет.

...
cert = CryptoPRO.Containers[_iN].GetRenewalCertRequest(OIDS, out container);
...
if (!InitSOAP(CryptoPRO.Containers[_iN].Certificate.SubjectCN)) return (false);
...
int reqID = 0;
try
{
reqID = int.Parse((string)CRSPSoap.InvokeMethod("SubmitRequest", cert, ""));
}
catch
{...
Номер: -2146881278
Источник: CPICom.CertRequest.1
Описание: CryptDecodeObjectEx
...
}
...
08.08.2007 16:06:01Kirill Sobolev
Ясно. Тогда заодно и давайте какой-нибудь файл подписанного запроса.
08.08.2007 16:37:47Александр
Отправил на info@cryptopro.ru
09.08.2007 10:54:26Василий
Получили почту.
Выяснилось, что Вы подписываете неправильный запрос.
Подробности:
Были присланы:
1) самоподписанный запрос на сертификат (pkcs10) в кодировке base64
2) тот же pkcs10, но в кодировке der, был подписан и всё это закодировано в base64
Так вот - во втором случае в pkcs10 нет последнего байта (выяснилось простым сравнением исходного pkcs10, перекодированного в der и подписанной части в pkcs7). Поэтому и не удалось раскодировать pkcs10.

Кстати, в другом случае (когда использовались стандартные OID-ы) pkcs10 перед подписью был в base64, поэтому всё получилось.
09.08.2007 11:14:50Александр
Василий, почту получил. Спасибо, что выяснили в чем проблема.

Кстати, куда исчезает последний байт:
http://cryptopro.ru/cryptopro/forum/view.asp?q=6002
http://www.codeproject.com/dotnet/CapicomUTF8.asp
09.08.2007 15:14:53Василий
А для CAPICOM 2.1.0.2 всё по-прежнему?
13.08.2007 10:56:56Александр
Было:
...
SignedDataClass oSignedData = new SignedDataClass();
UtilitiesClass Out = new UtilitiesClass();
oSignedData.Content = Out.Base64Decode(sPKCS10);// <<<--Здесь ошибка
...


Исправил:
...
SignedDataClass oSignedData = new SignedDataClass();
UtilitiesClass Out = new UtilitiesClass();
oSignedData.Content = Out.ByteArrayToBinaryString( System.Text.Encoding.UTF8.GetBytes(sPKCS10));
...


ps. Vasiliy, sorry for late reply