2015-04-08 4 views
0

Я пытаюсь удалить сертификат из хранилища сертификатов «Доверенные корневые центры сертификации». Этот магазин можно получить из java, используя провайдера SunMSCAPI, и согласно oracle's documentation, вы должны иметь возможность читать и писать в «Личный» магазин и «Доверенные корневые центры сертификации». По крайней мере, моя интерпретация предложенияУдалить сертификат из хранилища сертификатов MS с Java и SunMSCAPI

Кроме того, изменения отражаются сразу же после внесения изменений в хранилище ключей, таких, как KeyStore.setKeyEntry (...), KeyStore.deleteEntry (...).

Однако при попытке удалить запись я получаю java.security.KeyStoreException: Access is denied.

Мой код выглядит

final KeyStore msCertStore = KeyStore.getInstance("Windows-ROOT", "SunMSCAPI"); 
msCertStore.load(null, null); 
if (msCertStore.containsAlias(mCertificateName)) 
{ 
    getLogger().info("Removing certificate with alias '{}' from store '{}'", mCertificateName, 
     mCertificateStore.getStoreName()); 
    msCertStore.deleteEntry(mCertificateName); 
} 

и что я получаю

Exception in thread "main" java.security.KeyStoreException: Access is denied. 

    at sun.security.mscapi.KeyStore.removeCertificate(Native Method) 
    at sun.security.mscapi.KeyStore.engineDeleteEntry(KeyStore.java:542) 
    at sun.security.mscapi.KeyStore$ROOT.engineDeleteEntry(KeyStore.java:68) 
    at java.security.KeyStore.deleteEntry(Unknown Source) 
    at my.playground.DeleteCertificateCommand.execute(DeleteCertificateInstallerCommand.java:67) 
    ... 

учетной записи пользователя, который используемый для выполнения кода, является локальным администратором, и я могу вручную удалить сертификат из хранилища в Windows certmg r.msc GUI. Но он не будет работать с использованием вышеуказанного кода.

Удаление сертификата из Личного магазина Windows-MY работает, похоже, связано с правами доступа. Но какие права мне нужны?

КСТАТИ: Операционная система Windows Server 2008 RC2

+0

В Windows Vista, так как идентификатор пользователя является "Администратор" не всегда достаточно, некоторые вещи нужно конкретный процесс, чтобы быть ** повышенным **, а также, по-видимому, немного уменьшить количество людей, пострадавших от загружаемых дисков, которые молчали в их системе. Я знаю, что на Vista и Seven certmgr появляется запрос на повышение. Есть много способов поднять, но как простой тест, если это консольный режим (java not javaw), попробуйте rightclick CMD RunAsAdministrator (даже если вы уже вошли в систему, я знаю), тогда ваша java под этим. –

+0

Я поместил командную строку в bat-файл и выбрал «Right-Click -> Run as Administrator» -> Тот же результат: Access denied Я запускаю команду в командной строке Windows, используя runas для запуска команды под local Adminstrator accoung -> Тот же результат: Доступ запрещен На самом деле мне не предлагается выполнить certmgr.msc с повышенными правами при открытии его с помощью обычной учетной записи домена ... BTW: Операционная система - Windows Server 2008 RC2 – dpr

ответ

0

Per http://www.oracle.com/technetwork/articles/javase/security-137537.html

// Note: When a security manager is installed, 
// the following call requires SecurityPermission 
// "authProvider.SunMSCAPI". 
ks.load(null, null); 
+0

На рабочем месте нет администратора безопасности, а работа с ошибкой - не загрузка магазина, а вызов 'sun.security.mscapi.KeyStore.removeCertificate' (см. Выше stacktrace). Однако я положил операцию внутри 'PriviledgedAction' и выполнил ее с помощью' AccessController.doPrivileged', но результат остается тем же ... – dpr

Смежные вопросы