I используется для доступа к цепочке сертификатов для PDF подписания на лексемы USB с этим кодом:Не удается получить доступ ко всем KeyStore алиасов USB маркеров
this._keyStore = KeyStore.getInstance("PKCS11");
this._keyStore.load(null, myPassword);
Enumeration<String> aliases = this._keyStore.aliases();
while (aliases.hasMoreElements()) {
String nextElement = (String) aliases.nextElement();
System.out.println("Enumeration element : "+nextElement);
try
{
this._privateKey = (PrivateKey) this._keyStore.getKey(nextElement, pass);
this._certificatesChain = (X509Certificate[]) this._keyStore.getCertificateChain(nextElement);
if (this._certificatesChain.length == 0)
{
//Let's try another
continue;
}
if (this._certificatesChain[0].getKeyUsage()[1])
{
//I want to use this
break;
}
}
catch (Exception e){continue;}
Я снабженным новый маркер USB, который выиграл» t работать с этим. Похоже, что использование PKCS11 будет просто читать один из двух сертификатов на токене, который не тот, который я должен использовать для подписания.
Лучшее решение, с которым я столкнулся, это использовать «Windows-MY» в вызове Keystore.getInstance(), который может получить доступ ко всем сертификатам (даже тем, которые не пришли из Token, но давайте перейдем пальцами) , БОЛЬШОЙ недостаток этого заключается в том, что при этом создается два запроса PIN-кода для всего процесса подписи: первый раз - это запрос, который я закодировал, чтобы спросить у пользователя PIN-код; второй раз, когда я пытаюсь подписать - на этот раз с приглашением в стиле Windows.
Есть ли способ получить доступ ко всем сертификатам с помощью экземпляра Keystore PKCS11 или избежать приглашения Windows?
Является ли это стандартным ключом хранения USB или криптографическим устройством? Во втором случае штыри нормальны для проблем безопасности. –
Это токен подписи USB. – Lorenzo