JC-WebClient работает со следующими основными сущностями:
- ключевая пара - открытый ключ и закрытый ключ;
- контейнер - открытый ключ, закрытый ключ и пользовательский сертификат;
- автономный сертификат - сертификат без открытого и закрытого ключей.
Для каждой из сущностей доступны команды создания, удаления и получения объектов.
Сущность | Действия | ||
|---|---|---|---|
Создание | Удаление | Получение | |
Ключевая пара | createKeyPair | deleteKeyPair | getKeyPairList |
Контейнер | writeUserCertificate | deleteUserCertificate | getContainerList |
Автономный сертификат | writeStandaloneCertificate | deleteStandaloneCertificate | getStandaloneCertificateList |
7.3.1 Ключевые пары и контейнеры
На рисунке ниже приведен жизненный цикл ключевых пар и контейнеров.
Описание
- После вызова команды createKeyPair на токене появляется ключевая пара с идентификатором keyPairID. Для ее удаления необходимо выполнить одну из команд deleteKeyPair или deletePKIObject, которые физически удалят все составляющие ключевой пары.
- Для создания контейнера необходимо вызвать одну из команд 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'};// Записать сертификат, полученный от УЦ и присвоенный переменной 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();7.3.2 Автономные сертификаты
На рисунке ниже приведен жизненный цикл автономных сертификатов.
Описание
- После вызова команды writeStandaloneCertificate на токене появляется автономный сертификат с идентификатором certID.
- Для его удаления необходимо выполнить одну из команд 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();
