Я использую Network Security Services в качестве моего поставщика Sun PKCS # 11 для моего Java-приложения, и я испытываю некоторые нежелательные действия.
Повторная вставка того же доверенного сертификата в хранилище ключей приведет к удалению атрибутов доверия, которые были успешно установлены при первоначальной вставке сертификата.
Вот неполный код, демонстрирующий суть проблемы:
Provider p = new SunPKCS11(pkcs11ConFile);
Security.addProvider(p);
KeyStore keystore = KeyStore.getInstance("PKCS11");
keystore.load(null, pwd);
pkcs11Keystore.setCertificateEntry(alias, cert);
//at this point, when I use certutil.exe to list the keystore certificate I can see
//the certificate listed with attributes "CT,C,C" for SSL,S/MIME,JAR/XPI respectively.
keystore.deleteEntry(alias);
keystore.setCertificateEntry(alias, cert);
//now when I run the same certutil.exe command I see empty trust attributes i.e. ",,".
Я все еще могу перезагрузить то же хранилище ключей (и сертификат), и аутентификация SSL работает безупречно, однако, когда приложение перезапускается и хранилище ключей повторно загружается, сертификат недоступен в списке доверенных псевдонимов.
Почему вещи не работают только при перезапуске приложения, для меня также загадка.
Я прочитал что-то, что, похоже, связано с http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6298106, однако, похоже, что оно не применимо на 100%, и я не понимаю внутренности nss, чтобы понять это полностью.
Кто-нибудь понимает это поведение?
спасибо, Майк