2010-12-14 30 views
12

Tôi đang cố gắng truy cập cửa hàng khóa MacOS X cá nhân của mình để truy xuất các khóa riêng tư cụ thể để mã hóa và ký một số dữ liệu bằng Java. Phần mã hóa và ký tên là chức năng, nhưng tôi không thể lấy lại khóa riêng mà tôi muốn. Sau đây là một số mã tôi đã viết để trình bày vấn đề tôi có:Lấy khóa riêng từ kho khóa MacOS X bằng cách sử dụng 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()); 
    } 
} 

Sau khi thực hiện đoạn mã đó, tôi có thể xem tất cả các chứng chỉ trong kho khóa cá nhân của tôi. Tuy nhiên, tôi chỉ có thể lấy một khóa riêng, mặc dù có một nhóm trong kho khóa. (đầu ra của mã chỉ hiển thị nhiều chứng chỉ tin cậy + chỉ một khóa riêng)

Và khi tôi xóa khóa riêng đó khỏi kho khóa và thực thi lại mã đó, một khóa riêng khác sẽ được trả về. Nhập khóa riêng tư trở lại trong kho khóa và thực thi mã đó lần cuối, nó được trả về bởi Java và khóa riêng tư cuối cùng đã được trả về trước đó sẽ không thể truy cập được.

Tôi đã tình cờ gặp một danh sách gửi thư về chủ đề đó: http://lists.apple.com/archives/java-dev/2007/aug/msg00134.html. Thật không may, nó không có vẻ như vấn đề đó đã được giải quyết, và tôi không thể liên lạc với những người liên quan (không có địa chỉ e-mail).

Có ai cố gắng truy xuất nhiều khóa riêng tư từ cửa hàng keychain MacOS và đã thành công không?

cấu hình của tôi:

  • hệ điều hành MacOS X 10.6
  • JVA JRE 1.6.0_15 (32 và 64bits)
  • Safari 4.0.3
  • Firefox 3.6.3

Cảm ơn trước,

+0

Bạn đã thử sử dụng công cụ khóa từ dòng lệnh chưa? nếu nó sẽ hoạt động - nó có thể là một công việc xung quanh vấn đề của bạn. Tôi đã sử dụng nó trong quá khứ và nó đã làm việc cho tôi ... –

Trả lời

2

Rất tiếc, đây là giới hạn đã biết ion của Apple KeyChain KeyStore thực hiện. Có một vé mở trong bộ theo dõi lỗi cổng OpenJDK MacOSX (MACOSX_PORT-464) và một bản vá đã được đệ trình.

Tuy nhiên, bạn sẽ phải biên dịch lại OpenJDK từ đầu (phải mất một lúc nhưng nó là thủ tục đơn giản) hoặc bạn sẽ phải trích xuất Nhà cung cấp dịch vụ mật mã Keychain từ các nguồn OpenJDK và xây dựng một bình mới chứa nhà cung cấp JCA độc lập (nhưng nó vì nó chứa mã nguồn gốc, nó có lẽ là một nhiệm vụ phức tạp hơn nhiều).

Các vấn đề liên quan