Жизненные циклы основных сущностей

JC-WebClient работает со следующими основными сущностями:

Для каждой из сущностей доступны команды создания, удаления и получения объектов.

Сущность Действия
Создание Удаление Получение
Ключевая пара createKeyPair getKeyPairList
Контейнер getContainerList
Автономный сертификат writeStandaloneCertificate getStandaloneCertificateList

Ключевые пары и контейнеры

На рисунке ниже приведен жизненный цикл ключевых пар и контейнеров.

../../../_images/kp_cont_lifecycle.png

Описание

  1. После вызова команды createKeyPair на токене появляется ключевая пара с идентификатором keyPairID. Для ее удаления необходимо выполнить одну из команд deleteKeyPair или deletePKIObject, которые физически удалят все составляющие ключевой пары.

  2. Для создания контейнера необходимо вызвать одну из команд writeUserCertificate или generateUserSelfSignedCertificate, после чего появится контейнер с идентификатором contID. Для его удаления необходимо выполнить одну из команд deleteContainer или deletePKIObject, которые физически удалят все составляющие контейнера.

    Примечание

    После появления контейнера логически исчезает сущность ключевой пары и идентификатор keyPairID становится невалидным, поэтому некоторые команды будут выбрасывать исключение, если им на вход передать keyPairID в качестве аргумента. При этом физически открытый и закрытый ключи никуда не исчезают с устройства.

  3. При помощи команды deleteUserCertificate можно удалить пользовательский сертификат из контейнера и получить обратно ключевую пару. При этом contID станет невалидным, а keyPairID - валидным.

Создание контейнера с помощью команды writeUserCertificate

Типовой сценарий использования описан в разделе Встраивание в инфраструктуру открытых ключей.

Примечание

При использовании команды writeUserCertificate тело сертификата должно быть передано в PEM или DER формате (см. Поддержка PEM и DER форматов).

// Идентификатор токена
var tokenID = 0;

// Предъявить PIN-код
JCWebClient2.bindToken({
   args: {
      tokenID: tokenID,
      pin: "my pin"
   }
});

// Создать контейнер с ключевой парой и присвоить ему имя
var keyPairID = JCWebClient2.createKeyPair({
   args: {
      paramSet: "XA",
      description: "my description"
   }
});

// Задать отличительное имя пользователя (Distinguished Name (DN)),
// включающее стандартное имя (Common Name, (CN))
var dn = {
   'CN': 'my CN',
   'C': 'RU'
};

// Задать расширения, определяющие область применения закрытого ключа
var exts = {
   'keyUsage': 'Digital Signature'
};

// Сгенерировать PKCS10 запрос на сертификат
var csr = JCWebClient2.genCSR({
   args: {
      id: keyPairID,
      dn: dn,
      exts: exts
   }
});

// Отправление запроса (csr) провайдеру ...

var certificate;
// Получение готового сертификата от провайдера и сохранение его в переменную certificate ...

// Записать сертификат
var contID = JCWebClient2.writeUserCertificate({
   args: {
      keyPairID: keyPairID,
      cert: certificate
   }
});

// Контейнер создан и keyPairID больше невалиден

// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

Создание контейнера с помощью команды generateUserSelfSignedCertificate

// Идентификатор токена
var tokenID = 0;

// Предъявить PIN-код
JCWebClient2.bindToken({
   args: {
      tokenID: tokenID,
      pin: "my pin"
   }
});

// Создать контейнер с ключевой парой и присвоить ему имя
var keyPairID = JCWebClient2.createKeyPair({
   args: {
      paramSet: "XA",
      description: "my description"
   }
});

// Задать отличительное имя пользователя (Distinguished Name (DN)),
// включающее стандартное имя (Common Name, (CN))
var dn = {
   'CN': 'my CN',
   'C': 'RU'
};

// Задать расширения, определяющие область применения закрытого ключа
var exts = {
   'keyUsage': 'Digital Signature'
};

// Записать сертификат, полученный от УЦ и присвоенный переменной certificate
var contID = JCWebClient2.generateUserSelfSignedCertificate({
   args: {
      keyPairID: keyPairID,
      dn: dn,
      exts: exts,
      days: 100
   }
});

// Контейнер создан и keyPairID больше невалиден

// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

Удаление контейнера

// Идентификатор токена
var tokenID = 0;

// Предъявить PIN-код
JCWebClient2.bindToken({
   args: {
      tokenID: tokenID,
      pin: "my pin"
   }
});

// Удаление контейнера
JCWebClient2.deleteContainer({
   args: {
      contID: contID
   }
});

// Контейнер удален

// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

Автономные сертификаты

На рисунке ниже приведен жизненный цикл автономных сертификатов.

../../../_images/standalone_lifecycle.png

Описание

  1. После вызова команды writeStandaloneCertificate на токене появляется автономный сертификат с идентификатором certID.
  2. Для его удаления необходимо выполнить одну из команд deleteStandaloneCertificate или deletePKIObject, которые физически удалят все составляющие автономного сертификата.

Создание автономного сертификата

Примечание

При использовании команды writeStandaloneCertificate тело сертификата должно быть передано в PEM или DER формате (см. Поддержка PEM и DER форматов).

// Идентификатор токена
var tokenID = 0;

// Предъявить PIN-код
JCWebClient2.bindToken({
   args: {
      tokenID: tokenID,
      pin: "my pin"
   }
});

// Тело сертификата в PEM формате
var certBody = "MIIBfTCCASoCCQDGS0qiKF8OKTAKBgYqhQMCAgMFADBFMQswCQYDVQQGEwJSVTET\
MBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ\
dHkgTHRkMB4XDTEzMDEzMDEyMzkyN1oXDTEzMDMwMTEyMzkyN1owRTELMAkGA1UE\
BhMCUlUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdp\
ZGdpdHMgUHR5IEx0ZDBjMBwGBiqFAwICEzASBgcqhQMCAiQABgcqhQMCAh4BA0MA\
BEDHgQAkxQJ95kibeD8kuRGv17zTWWIkf2JhnRuyZ7OzTJQyeG3KaxZ1je4lVq+e\
6+i38lUu33cVESIU9L6Mc2SyMAoGBiqFAwICAwUAA0EARj1I65tsiChYFM0thKlI\
AZQ+YIh/OgUe7+QzVxVoQg9W8OT845us4GDo3WnQArmJIPa6PtSJxfQqz9NAXROK\
sA==";

// Создать контейнер с ключевой парой и присвоить ему имя
var certID = JCWebClient2.writeStandaloneCertificate({
   args: {
      cert: certBody,
      description: "my description"
   }
});

// Автономный сертификат создан

// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

Удаление автономного сертификата

// Идентификатор токена
var tokenID = 0;

// Предъявить PIN-код
JCWebClient2.bindToken({
   args: {
      tokenID: tokenID,
      pin: "my pin"
   }
});

// Удаление автономного сертификата
JCWebClient2.deleteStandaloneCertificate({
   args: {
      certID: certID
   }
});

// Автономный сертификат удален

// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

Оглавление