Tôi đang cố gắng để có được một ví dụ của org.apache.ws.security.components.crypto.Merlin
sử dụng org.apache.ws.security.components.crypto.CryptoFactory
cụ thể là phương pháp CryptoFactory.getInstance(properties)
.Sự cố khi khởi tạo JavaKeyStore từ tệp
này consistantly sẽ ném
java.lang.RuntimeException: org.apache.ws.security.components.crypto.Merlin cannot create instance
mà evantually là do
java.security.UnrecoverableKeyException: Password verification failed
Các mật khẩu trên file keystore đã được kiểm tra với keytool trên dòng lệnh và là đúng .
keystore được tạo ra thông qua quá trình sau:
Đó là trong thư mục gốc của porject nhật thực.
Các Nhờ có chương trình kiểm tra như sau:
public class App {
public static void main(String[] args) throws CredentialException,
IOException {
System.out.println("Starting");
Properties p = new Properties();
p.setProperty("org.apache.ws.security.crypto.merlin.keystore.password",
"password");
p.setProperty("org.apache.ws.security.crypto.provider",
"org.apache.ws.security.components.crypto.Merlin");
p.setProperty("org.apache.ws.security.crypto.merlin.keystore.type",
"jks");
p.setProperty("org.apache.ws.security.crypto.merlin.file", "./testkeystore.jks");
Crypto crypto = CryptoFactory.getInstance(p);
System.out.println(" Complete ");
}
}
và ngoại lệ sau đây được tạo ra:
Exception in thread "main" java.lang.RuntimeException: org.apache.ws.security.components.crypto.Merlin cannot create instance
at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:225)
at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:180)
at org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:73)
at com.restart.test.cryptotest2.App.main(App.java:22)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:211)
... 3 more
Caused by: org.apache.ws.security.components.crypto.CredentialException: Failed to load credentials.
at org.apache.ws.security.components.crypto.AbstractCrypto.load(AbstractCrypto.java:174)
at org.apache.ws.security.components.crypto.AbstractCrypto.<init>(AbstractCrypto.java:135)
at org.apache.ws.security.components.crypto.Merlin.<init>(Merlin.java:71)
... 8 more
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:772)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
at java.security.KeyStore.load(KeyStore.java:1214)
at org.apache.ws.security.components.crypto.AbstractCrypto.load(AbstractCrypto.java:168)
... 10 more
Caused by: java.security.UnrecoverableKeyException: Password verification failed
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:770)
... 13 more
Mật khẩu như được chỉ ra trong cửa sổ cmd được thiết lập để "password", nhưng bằng tất cả tài khoản ứng dụng đang từ chối nó, tôi có thể thay đổi mật khẩu bằng cách sử dụng keytool -storepasswd
mà không có vấn đề gì, Vì vậy, tôi biết mật khẩu mà tôi đang cung cấp là chính xác; bất cứ ai có thể gợi ý những gì có thể xảy ra ở đây không? Tôi đã cố gắng để gỡ lỗi này không thành công cho một ngày đầy đủ bây giờ.
Nếu có bất kỳ thông tin bổ sung nào tôi có thể cung cấp, vui lòng cho tôi biết.
chỉnh sửa -
các maven phụ thuộc folloing là cần thiết để xây dựng thử nghiệm này:
<dependency>
<groupId>org.apache.ws.security</groupId>
<artifactId>wss4j</artifactId>
<version>1.5.8</version>
<scope>provided</scope>
</dependency>
Chỉ cần lặp lại các bước của bạn với Oracle JDK 1.6 và nó hoạt động mà không có bất kỳ lỗi nào. Có thể mật khẩu của bạn không chính xác hoặc bạn đang cố mở kho khóa khác? Hãy thử tạo lại nó và thiết lập đường dẫn tuyệt đối đến kho khóa. – user1516873
Xin chào người dùng, Sau khi đọc nhận xét của bạn, tôi đã xây dựng nó dựa trên một phiên bản JDK/JRE khác và nó đã hoạt động, sau khi tải xuống các nguồn cho rt.java và bước qua tôi thấy rằng lớp CryptoBase đã khởi tạo hai JavaKeyStores, tệp .jks của tôi) được tạo ra tốt, nhưng thứ hai là kho khóa 'cacerts' trong' jre \ lib \ security> 'không có mật khẩu mặc định của' changeit' đã gây ra lỗi không thành công; Bây giờ tôi đã thay đổi mật khẩu trên keystore jre và tôi đang làm việc tốt trong jre/jdk ban đầu của tôi. Cảm ơn bạn đã xác nhận rằng đây là cấu hình .. – Waltzy
... vấn đề và không phải là vấn đề về mã hóa đối với tôi. Tuy nhiên, tôi rất lo lắng cho tiền thưởng đại diện của tôi để lãng phí, vì vậy nếu bạn muốn viết một cái gì đó cho một hiệu ứng tương tự, tôi có thể trao nó cho bạn. – Waltzy