Rutoken 4.4.1 (mac) vs 4.0.1 (windows)

Добрый день.

Хотелось бы понять разницу между этими версиями. В проекте используется ( web/angular2 ).

Я был вынужден поставить последнюю 4.4.1 на сегодняшний день версию плагина.

По коду вижу вызов generateKeyPair и в его then (Promise resolve) вызов createPkcs10. В этом месте вываливается ошибка

{errorCode: 2, errorText: "BAD_PARAMS"}


В чем может быть дело, если на версии плагина 4.0.1 windows нет проблемы, на macOs(10.14) 4.4.1 ошибка не дает работать?

Найти и заглянуть в реализацию createPkcs10 не удалось, посколько просто не удалось найти исходник.

Re: Rutoken 4.4.1 (mac) vs 4.0.1 (windows)

Добрый день, а можете показать кусок кода с вызовом generateKeyPair?

С уважением, Алексей Лазарев, Компания "Актив"

Re: Rutoken 4.4.1 (mac) vs 4.0.1 (windows)

    return await new Promise((resolve, reject) => {
      console.log(this.token.id); // 0
      console.log(containerName); // klient:_3240441_1570021724430
      console.log(options); // {paramset: "A", publicKeyAlgorithm: 4, signatureSize: 1024 }



      this.plugin.generateKeyPair(this.token.id, 'A', containerName, options)
        .then((containerId: any) => {
          const options = {hashAlgorithm: this.hashAlgorithm};
          console.log(containerId); // 58:19:37:a2:04:f7:31:14:46:89 .... 
          console.log(subject); // массив подобных элементов  {rdn: "commonName", value: "Клиент: 3240441"}
          console.log(extensions); // {}



          this.plugin.createPkcs10(this.token.id, containerId, subject, extensions, options)
            .then((csr: string) => {

              const result = csr
                .replace('-----BEGIN CERTIFICATE REQUEST-----\n', '')
                .replace('\n-----END CERTIFICATE REQUEST-----', '');

              resolve(result);
              this.processing = false;
            })
            .then(undefined, (err: { error: string, message: string }) => {
// Reject в этом месте
              reject({
                errorCode: +err.message,
                errorText: this.getErrorByCode(+err.message)
              });
              this.processing = false;
            });
        })
        .then(undefined, (err: { error: string, message: string }) => {
          reject({
            errorCode: +err.message,
            errorText: this.getErrorByCode(+err.message)
          });
          this.processing = false;
        });
    });
Алексей Лазарев пишет:

Добрый день, а можете показать кусок кода с вызовом generateKeyPair?

Re: Rutoken 4.4.1 (mac) vs 4.0.1 (windows)

mihail910 пишет:
    return await new Promise((resolve, reject) => {
      console.log(this.token.id); // 0
      console.log(containerName); // klient:_3240441_1570021724430
      console.log(options); // {paramset: "A", publicKeyAlgorithm: 4, signatureSize: 1024 }



      this.plugin.generateKeyPair(this.token.id, 'A', containerName, options)
        .then((containerId: any) => {
          const options = {hashAlgorithm: this.hashAlgorithm};
          console.log(containerId); // 58:19:37:a2:04:f7:31:14:46:89 .... 
          console.log(subject); // массив подобных элементов  {rdn: "commonName", value: "Клиент: 3240441"}
          console.log(extensions); // {}



          this.plugin.createPkcs10(this.token.id, containerId, subject, extensions, options)
            .then((csr: string) => {

              const result = csr
                .replace('-----BEGIN CERTIFICATE REQUEST-----\n', '')
                .replace('\n-----END CERTIFICATE REQUEST-----', '');

              resolve(result);
              this.processing = false;
            })
            .then(undefined, (err: { error: string, message: string }) => {
// Reject в этом месте
              reject({
                errorCode: +err.message,
                errorText: this.getErrorByCode(+err.message)
              });
              this.processing = false;
            });
        })
        .then(undefined, (err: { error: string, message: string }) => {
          reject({
            errorCode: +err.message,
            errorText: this.getErrorByCode(+err.message)
          });
          this.processing = false;
        });
    });

Покажите, пожалуйста, параметры options которые вы передаете в функции generateKeyPair и createPkcs10.

Сверьте их поля с документацией на API Рутокен Плагина 4.4.1.

Re: Rutoken 4.4.1 (mac) vs 4.0.1 (windows)

я немного сократил код, параметры обозначил.
суть то в том, что на windows 4.0.1 работает, на mac 4.4.1 не работает.

Павел Анфимов пишет:
mihail910 пишет:
    return await new Promise((resolve, reject) => {
      console.log(options); // {paramset: "A", publicKeyAlgorithm: 4, signatureSize: 1024 } ПЕРЕДАЕТСЯ В GENERATEKEYPAIR
      this.plugin.generateKeyPair(this.token.id, 'A', containerName, options)
        .then((containerId: any) => {
          const options = {hashAlgorithm: this.hashAlgorithm}; //передается в CREATEPKCS10
          this.plugin.createPkcs10(this.token.id, containerId, subject, extensions, options)
            .then((csr: string) => {
...
            })
            .then(undefined, (err: { error: string, message: string }) => {
// Reject в этом месте
...
            });
        })
        .then(undefined, (err: { error: string, message: string }) => {...});
    });

Покажите, пожалуйста, параметры options которые вы передаете в функции generateKeyPair и createPkcs10.

Сверьте их поля с документацией на API Рутокен Плагина 4.4.1.

Re: Rutoken 4.4.1 (mac) vs 4.0.1 (windows)

mihail910 пишет:

я немного сократил код, параметры обозначил.
суть то в том, что на windows 4.0.1 работает, на mac 4.4.1 не работает.

Павел Анфимов пишет:
mihail910 пишет:
    return await new Promise((resolve, reject) => {
      console.log(options); // {paramset: "A", publicKeyAlgorithm: 4, signatureSize: 1024 } ПЕРЕДАЕТСЯ В GENERATEKEYPAIR
      this.plugin.generateKeyPair(this.token.id, 'A', containerName, options)
        .then((containerId: any) => {
          const options = {hashAlgorithm: this.hashAlgorithm}; //передается в CREATEPKCS10
          this.plugin.createPkcs10(this.token.id, containerId, subject, extensions, options)
            .then((csr: string) => {
...
            })
            .then(undefined, (err: { error: string, message: string }) => {
// Reject в этом месте
...
            });
        })
        .then(undefined, (err: { error: string, message: string }) => {...});
    });

Покажите, пожалуйста, параметры options которые вы передаете в функции generateKeyPair и createPkcs10.

Сверьте их поля с документацией на API Рутокен Плагина 4.4.1.

В версии 4.4.1 обработка входных параметров могла стать более строгой.

Сделайте, пожалуйста, дамп всех параметров передающихся в функию createPkcs10.

(2019-10-03 13:19:02 отредактировано mihail910)

Re: Rutoken 4.4.1 (mac) vs 4.0.1 (windows)

Такие входные параметры в функцию generateKeyPair и createPkcs10

Вызов - generateKeyPair(this.token.id, 'A', containerName, options)
generateKeyPair. params - deviceId, reserved, marker, options
deviceId === token.id
0
reserved === "A"
A
marker === containerName
kratkoe_3001688_1570097621747
options
{publicKeyAlgorithm: 4, paramset: "A", signatureSize: 1024}

Вызов createPkcs10(this.token.id, containerId, subject, extensions, options)
createPkcs10. params - deviceId, keyId, subject, extensions, options
deviceId === token.id
0
keyId === containerId ( из вызова generateKeyPair )
72:8a:46:e7:c2:37:b2:86:f2:54:b4:21:99:1d:ed:05:fe:91:16:ba
subject
(12) [{rdn: "commonName", value: "Краткое 30016889998"}1: {rdn: "organizationName", value: "Краткое 300168876767"}2: {rdn: "countryName", value: "BY"}3: {rdn: "stateOrProvinceName", value: "50 Московская область"}4: {rdn: "localityName", value: "Г Моска"}5: {rdn: "INN", value: "99999999999"}6: {rdn: "SNILS", value: "00000000000"}7: {rdn: "OGRN", value: "0000002221688"}8: {rdn: "title", value: "Главный"}9: {rdn: "2.5.4.9", value: "infr_name : (чистка), 0"}10: {rdn: "surname", value: "Клиент:"}11: {rdn: "givenName", value: "2257940 "}]
extensions
{}
options
{hashAlgorithm: 2}
Павел Анфимов пишет:

Сделайте, пожалуйста, дамп всех параметров передающихся в функию createPkcs10.

Re: Rutoken 4.4.1 (mac) vs 4.0.1 (windows)

mihail910 пишет:

Такие входные параметры в функцию generateKeyPair и createPkcs10

Вызов - generateKeyPair(this.token.id, 'A', containerName, options)
generateKeyPair. params - deviceId, reserved, marker, options
deviceId === token.id
0
reserved === "A"
A
marker === containerName
kratkoe_3001688_1570097621747
options
{publicKeyAlgorithm: 4, paramset: "A", signatureSize: 1024}

Вызов createPkcs10(this.token.id, containerId, subject, extensions, options)
createPkcs10. params - deviceId, keyId, subject, extensions, options
deviceId === token.id
0
keyId === containerId ( из вызова generateKeyPair )
72:8a:46:e7:c2:37:b2:86:f2:54:b4:21:99:1d:ed:05:fe:91:16:ba
subject
(12) [{rdn: "commonName", value: "Краткое 30016889998"}1: {rdn: "organizationName", value: "Краткое 300168876767"}2: {rdn: "countryName", value: "BY"}3: {rdn: "stateOrProvinceName", value: "50 Московская область"}4: {rdn: "localityName", value: "Г Моска"}5: {rdn: "INN", value: "99999999999"}6: {rdn: "SNILS", value: "00000000000"}7: {rdn: "OGRN", value: "0000002221688"}8: {rdn: "title", value: "Главный"}9: {rdn: "2.5.4.9", value: "infr_name : (чистка), 0"}10: {rdn: "surname", value: "Клиент:"}11: {rdn: "givenName", value: "2257940 "}]
extensions
{}
options
{hashAlgorithm: 2}
Павел Анфимов пишет:

Сделайте, пожалуйста, дамп всех параметров передающихся в функию createPkcs10.

Дело вот в чем: вы создали ключ по алгоритму PUBLIC_KEY_ALGORITHM_GOST3410_2012_512 (значение 4) , а в функцию создания запроса передаете алгоритм хеша HASH_TYPE_GOST3411_12_256 (значение 2). Чтобы заработало надо передавать HASH_TYPE_GOST3411_12_512 (значение 4).