2013-04-26 15 views
6

dosyasından başlatırken karşılaşılan sorun org.apache.ws.security.components.crypto.CryptoFactory örneğini kullanarak org.apache.ws.security.components.crypto.Merlin örneğini özellikle CryptoFactory.getInstance(properties) yöntemini kullanarak çalışıyorum.Bir JavaKeyStore dosyasını

Bu consistantly kaybedilebilir

java.security.UnrecoverableKeyException: Password verification failed

deposu dosyasına şifre kaynaklanır

java.lang.RuntimeException: org.apache.ws.security.components.crypto.Merlin cannot create instance

komut satırında keytool ile kontrol edilmiştir atmak ve doğru olacaktır .

deposu aşağıdaki işlem aracılığı oluşturulur: Tutulma proje yüklenicisinin kök dizininde olduğunu

CMD Window detailing keytool -genkey -keystore testkeystore.jks

.

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 "); 

    } 
} 

ve aşağıdaki özel durum oluşturulur: şu şekildedir:

testi applciation olduğunu

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 

için "şifresini" ayarlandığında cmd penceresinde belirtildiği şekilde şifre, ama herkes tarafından uygulama reddediyor hesaplar, hiçbir sorun olmadan keytool -storepasswd kullanarak parola değiştirebilir, Bu yüzden sağladığım şifreyi biliyorum; Burada yanlış olan ne olabilir? Bunu bir gün boyunca tam olarak başarısızlıkla ayıklamaya çalışıyorum.

Sağladığım ek bilgiler varsa lütfen bize bildirin.

düzenleme -

folloing maven bağımlılık bu testi inşa etmek gereklidir: StackTrace

'org.apache.ws diyor çünkü

<dependency> 
     <groupId>org.apache.ws.security</groupId> 
     <artifactId>wss4j</artifactId> 
     <version>1.5.8</version> 
     <scope>provided</scope> 
    </dependency> 
+2

Sadece adımlarınızı Oracle JDK 1.6 ile tekrarlayın ve herhangi bir hata olmadan çalışın. Belki şifreniz yanlış mı yoksa farklı anahtar deposu açmaya mı çalışıyorsunuz? Yeniden oluşturmayı deneyin ve anahtar deposuna mutlak yol ayarlayın. – user1516873

+0

Merhaba Kullanıcı, Yorumlarınızı okuduktan sonra, JDK/JRE'nin farklı bir sürümüne karşı geliştirdim ve çalıştım, rt.java kaynaklarını indirdikten sonra ve adım adım geçtikten sonra CryptoBase sınıfının iki JavaKeyStores (benim .jks dosya), iyi örnekleme, ama ikinci başarısızlık neden oldu “changeit” varsayılan parola yoktu 'jre \ lib \ security>' 'cacerts' anahtar deposu oldu; Şimdi jre anahtar deposundaki şifreyi değiştirdim ve orijinal jre/jdk'imde iyi çalışıyorum. Bu yüzden bu bir yapılandırma olduğunu onaylamak için teşekkürler .. – Waltzy

+0

... benim için bir kodlama sorunu ve değil. Bununla birlikte, boşa gitmem için rep ödülüm için çok sevindim, bu yüzden eğer benzer bir etki yaratmak istiyorsanız, bunu size verebilirim. – Waltzy

cevap

2

Kullanıcı Ben'den gelen yorumları okuduktan sonra, JDK/JRE'nin farklı bir sürümüne karşı çalıştı ve rt.java kaynaklarını indirip çalıştırarak çalıştı ve CryptoBase sınıfının iki JavaKeyStores'i ilk kez başlattığını fark ettim. (.jks dosyam olmak), iyi örneklenen, ancak ikincicacerts anahtar deposu oldu ve bu hataya neden olan changeit varsayılan parolası yoktu;

Şimdi jre anahtar deposundaki parolayı değiştirdim ve orijinal jre/jdk'de çalışıyorum.

1

Ben senin sorunun kütüphaneleri ile ilgili olduğunu düşünüyorum .security.components.crypto.Merlin, '

örneğini oluşturamıyor, bu WSS4J kitaplığınızın (yanlış bir sürümüne sahip olmadığınız) olmadığı anlamına gelir.

+0

Merhaba Curro, Ben bu sorunu düzeltmeyi başarmıştım (ayrıntılı cevaplarım aşağıdadır), ancak sonraki 4 günün sonunda size ödül vereceğim, böylece rep kaybedilmez. – Waltzy