В основном реализация 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);