2016-03-27 41 views
4

tanınmadı. BouncyCastleCrypto kullanarak protokolde kriptografik işlemleri gerçekleştiren yubico, u2flib-server-core'dan kütüphane kullanıyorum. Hovewer, kalıcı depolama ben mesajlaWildfly 10 BouncyCastleCrypto ECDSA anahtar Spec I (öldürmekle donanım jetonu giriş güvence olan) benim J2EE uygulama FIDO U2F için destek ekliyorum

durum almaya devam itibaren genel anahtarı için kodlama yaparken

ben kütüphaneden bu işlev için aşağı sorunu daralmış var "anahtar spec tanınmadı"

public PublicKey decodePublicKey(byte[] encodedPublicKey) throws U2fBadInputException { 
     try { 
      X9ECParameters curve = SECNamedCurves.getByName("secp256r1"); 
      ECPoint point; 
      try { 
       point = curve.getCurve().decodePoint(encodedPublicKey); 
      } catch (RuntimeException e) { 
       throw new U2fBadInputException("Could not parse user public key", e); 
      } 

      return KeyFactory.getInstance("ECDSA").generatePublic(
        new ECPublicKeySpec(point, 
          new ECParameterSpec(
            curve.getCurve(), 
            curve.getG(), 
            curve.getN(), 
            curve.getH() 
          ) 
        ) 
      ); 
     } catch (GeneralSecurityException e) { //This should not happen 
      throw new RuntimeException(e); 
     } 
    } 

Yöntem generatePublic istisna atar RuntimeException olarak yakalanmış ve yeniden gündeme getirilmiştir.

Ben KeyFactory.getInstance M.Ö. sağlayıcıdan, KeyFactory döndüren doğruladıktan. Bu kodu Wildfly dışında çalıştırmak mükemmel bir şekilde çalışıyor. (Bcprov-ext-jdk15on-154.jar'ı java'nın/lib/ext'inin içine koymak zorunda kaldım).

Zaten BouncyCastle için wildfly en modülünü güncelleyerek denedi

, şu anda ben yayınlanan tüm 6 kavanoz eklemiş http://www.bouncycastle.org/latest_releases.html

yığın izleme dan

İlginç kısım birisi :-) teşekkürler bana yardımcı olabilir

java.security.spec.InvalidKeySpecException: key spec not recognised 
    at org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic(Unknown Source) 
    at org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi.engineGeneratePublic(Unknown Source) 
    at java.security.KeyFactory.generatePublic(KeyFactory.java:334) 
    at com.yubico.u2f.crypto.BouncyCastleCrypto.decodePublicKey(BouncyCastleCrypto.java:60) 
    at com.yubico.u2f.data.messages.key.RawAuthenticateResponse.checkSignature(RawAuthenticateResponse.java:64) 
    at com.yubico.u2f.U2fPrimitives.finishAuthentication(U2fPrimitives.java:153) 
    at com.yubico.u2f.U2F.finishAuthentication(U2F.java:116) 
    at com.yubico.u2f.U2F.finishAuthentication(U2F.java:90) 

Umuttur önceden

DÜZENLEME: Bu kodu diğer modlarla denedim ve bir tanesinin algılanacağı bir olaya benzemedim. AK'yi kullanma Bu durumun farklı olması, diğer sağlayıcıyı kullandığı için farklıdır, ancak sağlayıcılar, BC'nin yukarıda bahsettiğim istisnai istisnanın üstündedir.

DÜZENLEME Ben ben ayrıntılı burada yapıp döndü böylece classloading sorunun çeşit olabileceğini düşünüyorum ilginç Kayıtlar

olduğunu
[Loaded org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi$ECDSA from file:/home/martin/java/jdk1.8.0_45/jre/lib/ext/bcprov-jdk15on-154.jar] 
[Loaded org.bouncycastle.jce.spec.ECKeySpec from jar:file:/opt/wildfly-10.0.0.Final/modules/system/layers/base/org/bouncycastle/main/bcprov-jdk15on-1.52.jar!/] 

KeyFactorySpi ve ECKeySpec iki farklı kavanoz geliyor gelen (classloaders?) Dolayısıyla KeyFactory kullanılan instanceof

başarısız

cevap

5

Son olarak bulundu mesele Ben KeySpec f geliyor olduğunu tespit classloaders ait ayrıntılı günlük açık

:-) KeySpec'in instanceof'ini kontrol eden KeyFactorySpi gibi farklı sınıf yükleyicileri. Bu sorunu çözerken sebep olduğum problem. WildFly 10, RestEasy'nin bağlı olduğu BouncyCastle modülü ile birlikte gönderildiği için yüklenir. Kullandığım Hovever kitaplığı da bazı BouncyCastle sınıflarını gönderdi.

yapmam gereken tek şey

Bu bana BouncyCastle için wildfly en modülünü kullanmak için izin aşağıdaki içerikleri

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1"> 
    <deployment> 
     <dependencies> 
      <module name="org.bouncycastle" /> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

ile jboss-dağıtım-structure.xml oluşturmak oldu. Hovewer, bunu yaptığım zaman, daha önce BouncyCastle'ı JRE'nin lib/ext/JRE'sini sunucuyla çalıştırdığım için koymaya çalıştım.

  1. jboss-dağıtım-yapısı oluşturma: Aşağıdaki sağlamak zorunda wildfly 10 ile BouncyCastle kullanılırken bu, Yani Özetle

    :-) başka nedeni ile tam olarak aynı hataya neden oldu.Wildfly modülüne bağımlı olan xml} veya alternatif olarak, bunu yapmak için MANIFEST.mf kullanabilirsiniz. Eğer dynamicaly BouncyCastle JCE sağlayıcısı eklerseniz

  2. (eğer yasal olarak tabii ki can) ayrıca JCE Sınırsız politika dosyalarını kullanmak zorunda,/JRE sen
  3. kullanırken size lib/ext BouncyCastle sağlayıcısı yok olduğundan emin olun

Umut bu

+0

size çözüm için çok teşekkür ederiz :-) gelecekte birisi yardımcı olur! –