Подтвердить что ты не робот

Получить секретный ключ из хранилища MacOS X с помощью Java

Я пытаюсь получить доступ к своему личному хранилищу ключей MacOS X для извлечения определенных секретных ключей для шифрования и подписи некоторых данных с помощью Java. Часть шифрования и подписания является функциональной, но я не могу получить секретные ключи, которые я хочу. Ниже приведен некоторый код, который я написал, чтобы представить проблему, которая у меня есть:

KeyStore myKeyStore;
myKeyStore = KeyStore.getInstance("KeychainStore", "Apple");
myKeyStore.load(null, null);

// Get all the aliases in a list (I thought that calling the KeyStore
// methods during the iteration was the reason why getKey wasn't responding properly!)
// ... it wasn't actually!
ArrayList<String> aliases = new ArrayList<String>();
Enumeration<String> e = myKeyStore.aliases();
while (e.hasMoreElements()) {
    aliases.add(e.nextElement());
}

for (String alias : aliases) {
    try {
        // I read on the Internet that any ASCII password is required
        // to get the getKey method working.
        Key k = myKeyStore.getKey(alias, "TEST".toCharArray());
        if (k == null) {
            System.out.println(alias + ": <null> (cannot retrieve the key)");
        } else {
            System.out.println(alias + ":");
            System.out.println(k);
        }
    } catch (Exception ex) {
        System.out.println(alias + ": " + ex.getMessage());
    }
}

После выполнения этой части кода я мог видеть все сертификаты в моем личном хранилище ключей. Тем не менее, я могу получить только один закрытый ключ, хотя в хранилище ключей есть куча. (вывод кода просто показывает несколько доверенных сертификатов + только один закрытый ключ)

И когда я удаляю этот закрытый ключ из хранилища ключей и снова запускаю этот код, возвращается другой закрытый ключ, а остальные остаются недоступными. Импортируя закрытый ключ обратно в хранилище ключей и выполняя этот код в последний раз, он возвращается Java, а последний закрытый ключ, который был ранее возвращен, становится недоступным.

Я наткнулся на список рассылки по этому вопросу: http://lists.apple.com/archives/java-dev/2007/aug/msg00134.html. К сожалению, похоже, что эта проблема не была решена, и я не могу связаться с вовлеченными лицами (нет адресов электронной почты).

Кто-нибудь пытался извлечь несколько закрытых ключей из хранилища ключей для ключей MacOS и удалось?

Моя конфигурация:

  • MacOS X 10.6
  • Jva JRE 1.6.0_15 (32 и 64 бит)
  • Safari 4.0.3
  • Firefox 3.6.3

Спасибо заранее,

4b9b3361

Ответ 1

К сожалению, это известное ограничение реализации Apple KeyChain KeyStore. Существует открытый билет в диспетчере ошибок портов OpenJDK MacOSX (MACOSX_PORT-464), и патч был отправлен.

Однако либо вам придется перекомпилировать OpenJDK с нуля (требуется некоторое время, но это простая процедура), либо вам придется извлечь из поставщика OpenJDK провайдера криптографических ключей Keychain и построить новую банку, содержащую автономный JCA-провайдер (но так как он содержит собственный код, это, вероятно, гораздо более сложная задача).