2009-06-27 47 views
17

Có ai biết cách giải quyết vấn đề này không? Tôi đã thử nhiều thứ, nhưng không ai trong số họ làm việc.java.io.IOException: Định dạng kho khóa không hợp lệ

Và khi tôi nhấp thêm chi tiết tôi có được điều này:

at sun.security.provider.JavaKeyStore.engineLoad(Unknown Source) 
atsun.security.provider.JavaKeyStore$JKS.engineLoad(Unknown Source) 
at java.security.KeyStore.load(Unknown Source) 
at com.sun.deploy.security.RootCertStore$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.deploy.security.RootCertStore.loadCertStore(Unknown Source) 
at com.sun.deploy.security.RootCertStore.load(Unknown Source) 
at com.sun.deploy.security.RootCertStore.load(Unknown Source) 
at com.sun.deploy.security.ImmutableCertStore.load(Unknown Source) 
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source) 
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source) 
at sun.plugin.security.PluginClassLoader.getPermissions(Unknown Source) 
at java.security.SecureClassLoader.getProtectionDomain(Unknown Source) 
at java.security.SecureClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.access$000(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at sun.applet.AppletClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.applet.AppletClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.applet.AppletClassLoader.loadCode(Unknown Source) 
at sun.applet.AppletPanel.createApplet(Unknown Source) 
at sun.plugin.AppletViewer.createApplet(Unknown Source) 
at sun.applet.AppletPanel.runLoader(Unknown Source) 
at sun.applet.AppletPanel.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
+0

Chính xác thì bạn đang cố gắng làm gì? Đăng một số mã ví dụ sẽ hữu ích. – Jonik

+0

Và vui lòng đăng những gì bạn đã thử? – akarnokd

+2

Nó không giống như Tomi đã viết bất kỳ mã liên quan đến KeyStore nào; ngăn xếp này chỉ đơn giản là một Applet bắt đầu. Có vẻ như trình nạp lớp đang gặp khó khăn khi chuẩn bị xác minh chữ ký applet. – erickson

Trả lời

4

Tôi nghĩ rằng file keystore bạn muốn sử dụng có một định dạng khác nhau hoặc không được hỗ trợ đối với các phiên bản Java của bạn. Bạn có thể đăng thêm một số thông tin về công việc của mình không?

Nói chung, để giải quyết vấn đề này, bạn có thể cần phải tạo lại toàn bộ kho khóa (sử dụng một số phiên bản JDK khác chẳng hạn). Trong việc xuất - nhập các khóa giữa cái cũ và cái mới - nếu bạn mở được cái cũ ở đâu đó khác.

Nếu nó chỉ đơn giản là một phiên bản không được hỗ trợ, hãy thử các nhà cung cấp BouncyCastle crypto ví dụ (mặc dù tôi không chắc chắn nếu nó bổ sung hỗ trợ Java với nhiều loại keystore hơn?) .

Chỉnh sửa: Tôi đã xem thông số tính năng của BC.

3

Kho lưu trữ khóa của bạn bị hỏng và bạn sẽ phải khôi phục hoặc tạo lại.

+0

Tôi sợ phải đề cập đến điều đó :) – akarnokd

49

Bạn có thể hỏng tệp trong khi sao chép/chuyển.

Bạn đang sử dụng maven? Nếu bạn đang sao chép tệp kho khóa bằng "filter = true", bạn có thể làm hỏng tệp.

Vui lòng kiểm tra kích thước tệp.

+2

+1 để suy nghĩ về Maven ... –

+2

Tuyệt vời! Tôi thực sự đã giúp tôi. Bạn có thể, làm ơn, làm rõ tại sao tham số lọc làm hỏng kho khóa? – Dmitry

+0

Cảm ơn bộ lọc = true ... đã lưu ngày của tôi –

5

(Re) cài đặt JDK mới nhất (ví dụ: Oracle's) đã sửa nó cho tôi.

Trước khi cài đặt JDK mới nhất, khi tôi thực hiện lệnh sau trong Terminal.app:

keytool -list -keystore $(/usr/libexec/java_home)/jre/lib/security/cacerts -v 

Nó dẫn đến:

keytool error: java.io.IOException: Invalid keystore format 
java.io.IOException: Invalid keystore format 
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650) 
    at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) 
    at java.security.KeyStore.load(KeyStore.java:1445) 
    at sun.security.tools.keytool.Main.doCommands(Main.java:792) 
    at sun.security.tools.keytool.Main.run(Main.java:340) 
    at sun.security.tools.keytool.Main.main(Main.java:333) 

Nhưng, sau khi cài đặt mới nhất của Oracle JDK và khởi động lại Thiết bị đầu cuối, thực hiện lệnh sau:

keytool -list -keystore $(/usr/libexec/java_home)/jre/lib/security/cacerts -v 

Kết quả bằng:

Enter keystore password: 

Điều này cho biết rằng keytool trên đường dẫn có thể truy cập kho khóa.

+1

Điều này làm việc cho tôi - chỉ cần cài đặt phiên bản mới nhất, mà Mac đã cập nhật thành bản vá hoặc thứ gì đó - nhưng chỉ một lần tôi bắt đầu cửa sổ thiết bị đầu cuối mới để đường dẫn sử dụng cập nhật java mới. Đặc biệt hữu ích là các lệnh sao chép lỗi và chứng minh vấn đề đã được giải quyết (mặc dù vì tham chiếu $ (java_home), những người làm việc trong terminal nơi lệnh gradle không hoạt động, điều này hơi khó hiểu)! –

11

Có thể mã hóa maven cho bạn KeyStore, bạn có thể đặt lọc = false để khắc phục sự cố.

<build> 
    ... 
    <resources> 
     <resource> 
      ... 
      <!-- set filtering=false to fix --> 
      <filtering>false</filtering> 
      ... 
     </resource> 
    </resources> 
</build> 
1

Tôi gặp sự cố với openJDK trên ubuntu, phải cài đặt Oracle JDK để làm việc đó.

Bạn có thể theo dõi điều này guide on google sites để thực hiện việc đó.

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