Для каждой из сущностей доступны команды создания, удаления и получения объектов.
Сущность | Действия | ||
---|---|---|---|
Создание | Удаление | Получение | |
Ключевая пара | createKeyPair | getKeyPairList | |
Контейнер | getContainerList | ||
Автономный сертификат | writeStandaloneCertificate | getStandaloneCertificateList |
На рисунке ниже приведен жизненный цикл ключевых пар и контейнеров.
Описание
После вызова команды createKeyPair на токене появляется ключевая пара с идентификатором keyPairID. Для ее удаления необходимо выполнить одну из команд deleteKeyPair или deletePKIObject, которые физически удалят все составляющие ключевой пары.
Для создания контейнера необходимо вызвать одну из команд writeUserCertificate или generateUserSelfSignedCertificate, после чего появится контейнер с идентификатором contID. Для его удаления необходимо выполнить одну из команд deleteContainer или deletePKIObject, которые физически удалят все составляющие контейнера.
Примечание
После появления контейнера логически исчезает сущность ключевой пары и идентификатор keyPairID становится невалидным, поэтому некоторые команды будут выбрасывать исключение, если им на вход передать keyPairID в качестве аргумента. При этом физически открытый и закрытый ключи никуда не исчезают с устройства.
При помощи команды deleteUserCertificate можно удалить пользовательский сертификат из контейнера и получить обратно ключевую пару. При этом contID станет невалидным, а keyPairID - валидным.
Типовой сценарий использования описан в разделе Встраивание в инфраструктуру открытых ключей.
Примечание
При использовании команды 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();
// Идентификатор токена
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();
На рисунке ниже приведен жизненный цикл автономных сертификатов.
Описание
Примечание
При использовании команды 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();