Жизненные циклы основных сущностей
USB-токены и смарт-карты JaCartaAPI и SDKUSB-токены и смарт-карты JaCarta
JC-WebClient работает со следующими основными сущностями:
- ключевая пара - открытый ключ и закрытый ключ;
- контейнер - открытый ключ, закрытый ключ и пользовательский сертификат;
- автономный сертификат - сертификат без открытого и закрытого ключей.
Для каждой из сущностей доступны команды создания, удаления и получения объектов.
| Сущность | Действия | ||
|---|---|---|---|
| Создание | Удаление | Получение | |
| --- | --- | --- | --- |
| Ключевая пара | createKeyPair | deleteKeyPair deletePKIObject | getKeyPairList |
| Контейнер | writeUserCertificate generateUserSelfSignedCertificate | deleteUserCertificate deleteContainer deletePKIObject | getContainerList |
| Автономный сертификат | writeStandaloneCertificate | deleteStandaloneCertificate deletePKIObject | getStandaloneCertificateList |
Ключевые пары и контейнеры
Заголовок раздела «Ключевые пары и контейнеры»На рисунке ниже приведен жизненный цикл ключевых пар и контейнеров.

Описание
- После вызова команды createKeyPair на токене появляется ключевая пара с идентификатором keyPairID. Для ее удаления необходимо выполнить одну из команд deleteKeyPair или deletePKIObject, которые физически удалят все составляющие ключевой пары.
- Для создания контейнера необходимо вызвать одну из команд writeUserCertificate или generateUserSelfSignedCertificate, после чего появится контейнер с идентификатором contID. Для его удаления необходимо выполнить одну из команд deleteContainer или deletePKIObject, которые физически удалят все составляющие контейнера.
3. При помощи команды [deleteUserCertificate](/jacarta/7-api-sdk/3-jc-webclient/3-3-opisanie-api/3-3-1-funktsionalnost-jc-webclient-api/3-3-1-6-vse-funktsii-jc-webclient/3-3-1-6-5-rabota-s-konteynerami/) можно удалить пользовательский сертификат из контейнера и получить обратно ключевую пару. При этом **contID** станет невалидным, а **keyPairID** \- валидным.Создание контейнера с помощью команды writeUserCertificate
Заголовок раздела «Создание контейнера с помощью команды writeUserCertificate»Типовой сценарий использования описан в разделе Встраивание в инфраструктуру открытых ключей.
// Идентификатор токена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
Заголовок раздела «Создание контейнера с помощью команды 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'};
// Записать сертификат, полученный от УЦ и присвоенный переменной certificatevar 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();Автономные сертификаты
Заголовок раздела «Автономные сертификаты»На рисунке ниже приведен жизненный цикл автономных сертификатов.

Описание
- После вызова команды writeStandaloneCertificate на токене появляется автономный сертификат с идентификатором certID.
- Для его удаления необходимо выполнить одну из команд deleteStandaloneCertificate или deletePKIObject, которые физически удалят все составляющие автономного сертификата.
Создание автономного сертификата
Заголовок раздела «Создание автономного сертификата»// Идентификатор токена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();
