Сообщение
  • Пожалуйста, прежде пройдите авторизацию
  • Страница:
  • 1
  • 2
  • 3

ТЕМА: Re: ASP .Net

Re: ASP .Net 5 года, 9 мес. назад #676

  • MeirambekBM
  • Новый участник
  • Постов: 5
  • Репутация: 0
Здравствуйте!

Привожу вам пример из своего кода, она точная такая же как вы утверждаете на клиенте:
public class RequestHandler : IHttpHandler {
        
    public void ProcessRequest (HttpContext context) {

        string murl = context.Request.RawUrl;
        
        var stream = context.Request.InputStream;

        byte[] buffer = new byte[stream.Length];
        stream.Read(buffer, 0, buffer.Length);
        string xml = System.Text.Encoding.UTF8.GetString(buffer);
        
        string password = "123456";        

        //string keyPath = "/GOSTKZ";
        string keyPath = @"C:\distr\MishaB\TEST_FCB_CS";

        IolaCOM.IIolaCOM2 iolaCom = new IolaCOM2();

        //IIolaCOM2 iolaCom = new IolaCOM2();

        iolaCom.KeyType = iolaCom.CertType = (int)IOLACOM_STORETYPE.ST_IOLA_PKCS12;
        iolaCom.KeyPath = iolaCom.CertPath = keyPath;

        //SoapHeader header = context.Request.Headers[0];
        
        iolaCom.SetPIN(password);

        try
        {
            string xmlsign = SignCsXmlV1("GOSTKZ", 0, xml, "");
            
        }
        catch (Exception ex)
        {
            //MessageBox.Show(ex.Message);
        }           
                
    }    
    
    private string SignCsXmlV1(string KeyId, int OperFlags, string InData, string InSign)
    {
        // Подписываем XML документ - указываем иолаком что данные в формате UNICODE - 'utf-16'
        // на выходе у насxmlsign - также в формате UNICODE. мы можем спокойно пользоваться данными
        // выводить их в визуальные боксы и тд
        
        IolaCOM.IIolaCOM2 iolaCOM_ = new IolaCOM.IolaCOM2();
        return iolaCOM_.SignXML(KeyId, OperFlags, "utf-16", InData, InSign);
    }


Но в момент подписывания ХМЛ документа у меня выскакивает нижеследующая ошибка, в чем может быть причина? (в указанном каталоге лежит закрытый ключ GOSTKZ.p12)

SignXML: export certificate by KeyID = "GOSTKZ" - certificate not found in store

Ну по тексту понятно что с данного ключа не выгружается нужный сертификат, и вот тут я встал, что дальше делать, подскажите плз?
Изменено: 5 года, 9 мес. назад от Murat Seisenov.

Re: ASP .Net 5 года, 9 мес. назад #677

  • Murat Seisenov
  • Модератор
  • Постов: 391
  • Репутация: 19
Здравствуйте!

У вас неправильный KeyID.
ID ключа обычно указывается в имени *.p12 файла. Или его можно получить как указано в примере ниже.

Вот пример на Delphi:

  //переменные и их типы
  KeyPath, KeyUIDs: AnsiString;
  TS: TStringList;
  alg, i: Integer;

  ...

  //--- Установим значение пути к ключу
  IolaTest.KeyPath := edtKeyPath.Text;
  IolaTest.CertPath := IolaTest.KeyPath;

  //--- Получить список ключей по указанному пути
  ComboBox1.Items.Clear;

  //--- Получим идентификаторы ключей в указанной папке
  KeyUIDs := IolaTest.GetKeyUids;
  if ((KeyUIDs = '') or (Length(KeyUIDs) = 0)) then Exit;

  //--- Разбиваем на части, т.к. между идентификаторами имеются разделители CRLF
  TS := TStringList.Create;
  TS.Text := KeyUIDs;
  for i := 0 to TS.Count-1 do
  begin
    ComboBox1.Items.Insert(i,TS.Strings[i]);
  end;

  if ComboBox1.Items.Count>0 then
    ComboBox1.ItemIndex := 0;

  Form1.ComboBox1Select(Sender);


Полный пример есть в последней версии SDK, которую Вы можете получить написав на Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Модератор

Re: ASP .Net 5 года, 9 мес. назад #678

  • MeirambekBM
  • Новый участник
  • Постов: 5
  • Репутация: 0
Я до этого проверил этот момент тоже!
При наполнении DropDownList с KeyID у меня как раз таки выбирается всего одни элемент и это ИД строковой, его я и передаю в свой метод который уже подписывает, но все равно у меня не получается:

Вот реализация:
// Получаем идентификаторы ключей в указанной папке
        string keyUids = iolaCom.GetKeyUids();

        if (keyUids == null || keyUids.Length == 0) return;

        // Разбиваем их на части, т.к. между идентификаторами имеются резделители
        // CRLF
        string[] keyIds = keyUids.Split(new String[] { "\r\n" }, StringSplitOptions.None);
        
        iolaCom.SetPIN(password);

        try
        {
            //string xmlsign = SignCsXmlV1("GOSTKZ", 0, xml, "");
            string xmlsign = SignCsXmlV1(keyIds[0], 0, xml, "");
            
        }
        catch (Exception ex)
        {
            //MessageBox.Show(ex.Message);
        }
Изменено: 5 года, 9 мес. назад от Murat Seisenov.

Re: ASP .Net 5 года, 9 мес. назад #679

  • Murat Seisenov
  • Модератор
  • Постов: 391
  • Репутация: 19
Какую ошибку выдает в этом случае?

И покажите текст функции SignCsXmlV1

PS: Выделяйте вставляемый код тэгами [ code ] [ /code ] (в квадратных скобках без пробелов)
Модератор

Re: ASP .Net 5 года, 9 мес. назад #680

  • MeirambekBM
  • Новый участник
  • Постов: 5
  • Репутация: 0
Мурат, да в принципе такая же ошибка:
SignXML: export certificate by KeyID = "GOSTKZ" - certificate not found in store

Текст метода SignCsXmlV1:
    private string SignCsXmlV1(string KeyId, int OperFlags, string InData, string InSign)
    {
        // Подписываем XML документ - указываем иолаком что данные в формате UNICODE - 'utf-16'
        // на выходе у насxmlsign - также в формате UNICODE. мы можем спокойно пользоваться данными
        // выводить их в визуальные боксы и тд
        
        IolaCOM.IIolaCOM2 iolaCOM_ = new IolaCOM.IolaCOM2();
        return iolaCOM_.SignXML(KeyId, OperFlags, "utf-16", InData, InSign);
    }

Сорри, но что то про квадратные скобки не понял, по ходу не выспался наверное ))
Изменено: 5 года, 9 мес. назад от Murat Seisenov.

Re: ASP .Net 5 года, 9 мес. назад #683

  • Murat Seisenov
  • Модератор
  • Постов: 391
  • Репутация: 19
1. Вы создаете другой экземпляр COM-объекта с именем IolaCOM_. И не задаете ему параметры KeyType, KeyPath, CertType, CertPath.

2. Вот пример на С# из SDK:
string[] keyIds = keyUids.Split(new String[] { "\r\n" }, StringSplitOptions.None);


3.
[ code ]
Код Вашей программы
[ /code ]
Модератор
Изменено: 5 года, 9 мес. назад от Murat Seisenov.
  • Страница:
  • 1
  • 2
  • 3
FaLang translation system by Faboba