Получить секретный ключ из хранилища 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());
 }
}
</null></string></string></string>

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

И когда я удаляю этот закрытый ключ из хранилища ключей и снова запускаю этот код, возвращается другой закрытый ключ, а остальные остаются недоступными. Импортируя закрытый ключ обратно в хранилище ключей и выполняя этот код в последний раз, он возвращается 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

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

1 ответ

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

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

licensed under cc by-sa 3.0 with attribution.