Как перезагрузить ключи безопасности Java KeyStore? - PullRequest
0 голосов
/ 25 апреля 2018
Provider p = new SunPKCS11(configName);
char[]pin = "****".toCharArray();
KeyStore ks = KeyStore.getInstance("PKCS11", p);
ks.load(null, this.pin);

if (-1 == Security.addProvider(this.p)) {
    throw new RuntimeException("Could not add security provider");
}

Как перезагрузить ключи?Каждый раз, когда я запускаю код, я получаю один и тот же экземпляр объекта KeyStore, поэтому одни и те же ключи.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

В основном реализация Sun Provider кэширует экземпляр Provider.Следовательно, вы получаете экземпляр в вашем приложении.Один из способов преодолеть это - вручную завершить работу поставщика PKCS11.Вы можете найти его в моем другом ответе здесь .

Добавить свойство в свой экземпляр провайдера p:

p.setProperty("pkcs11LibraryPath", library);

И затем завершить работу провайдера PKCSвручную перед извлечением ключей:

PKCS11 pkcs11 = PKCS11.getInstance(((sun.security.pkcs11.SunPKCS11) provider).getProperty("pkcs11LibraryPath"), null, null, true);
pkcs11.C_Finalize(PKCS11Constants.NULL_PTR);
0 голосов
/ 10 апреля 2019

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

File f = new File(kStoreName);
if(f.exists() && !f.isDirectory()){
   try(FileInputStream fis = new FileInputStream(f.getAbsolutePath())){
     ks.load(fis, storePassword.toCharArray());
  }
}
...