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