2016-10-14 10 views
2

を見つけていない私は JavaバージョンでWebSphereサーバー8.5 上の問題を抱えている= 1.6.0、Javaランタイムのバージョン= pap6460_26sr8fp7ifx-20151008_01(SR8 FP7)java.security.NoSuchAlgorithmException:署名MD5WITHRSA実装

失敗したコードは次のとおりです。

Security.addProvider(new BouncyCastleProvider()); 
    Signature sign = Signature.getInstance("MD5withRSA", "BC"); 

私が手にエラーがある:

java.security.NoSuchAlgorithmException: Signature MD5WITHRSA implementation not found: java.lang.ClassNotFoundException: org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi$MD5 

同じコードがドで動作します

セキュリティ:わずかに異なるJavaバージョンとのvelopment環境(Javaバージョン= 1.6.0は、Javaランタイムのバージョン= pap6460_26sr8fp20-20160111_01(SR8 FP20))は

私は、次のコードで、すべての署名アルゴリズムを一覧表示しようとしています。 addProvider(新しいBouncyCastleProvider());

TreeSet<String> algorithms = new TreeSet<String>(); 
    for (Provider provider : Security.getProviders()) 
     for (Service service : provider.getServices()) 
      if (service.getType().equals("Signature")) 
       algorithms.add(service.getAlgorithm()); 
    for (String algorithm : algorithms) 
     System.out.println(algorithm); 

と私が取得:

DSA 
DSAforSSL 
ECDSA 
ECDSAforSSL 
ECGOST3410 
GOST3410 
GOST3411WITHECGOST3410 
MD2WITHRSA 
MD2withRSA 
MD4WITHRSA 
MD5WITHRSA 
MD5withRSA 
MD5withRSA/ISO9796-2 
NONEWITHDSA 
NONEwithECDSA 
OID.1.2.840.113549.1.1.10 
RAWRSASSA-PSS 
RIPEMD128WITHRSA 
RIPEMD160WITHECDSA 
RIPEMD160WITHRSA 
RIPEMD160withRSA/ISO9796-2 
RIPEMD256WITHRSA 
RMD128WITHRSA 
RMD160WITHRSA 
RMD256WITHRSA 
RSA 
RSAPSS 
RSASSA-PSS 
RSAforSSL 
SHA1WITHCVC-ECDSA 
SHA1WITHECNR 
SHA1WITHRSA 
SHA1withDSA 
SHA1withECDSA 
SHA1withRSA 
SHA1withRSA/ISO9796-2 
SHA1withRSA/PSS 
SHA224WITHCVC-ECDSA 
SHA224WITHDSA 
SHA224WITHECDSA 
SHA224WITHECNR 
SHA224WITHRSA 
SHA224withECDSA 
SHA224withRSA 
SHA224withRSA/PSS 
SHA256WITHCVC-ECDSA 
SHA256WITHDSA 
SHA256WITHECDSA 
SHA256WITHECNR 
SHA256WITHRSA 
SHA256withDSA 
SHA256withRSA 
SHA256withRSA/PSS 
SHA2withECDSA 
SHA384WITHDSA 
SHA384WITHECDSA 
SHA384WITHECNR 
SHA384WITHRSA 
SHA384withRSA 
SHA384withRSA/PSS 
SHA3withECDSA 
SHA512WITHDSA 
SHA512WITHECDSA 
SHA512WITHECNR 
SHA512WITHRSA 
SHA512withRSA 
SHA512withRSA/PSS 
SHA5withECDSA 

ので、MD5withRSAがあります。

クラスorg.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi $ MD5正しくクラスの場所を返し

アプリケーションと

System.out.println("--->DigestSignatureSpi" + MD5.class.getResource("DigestSignatureSpi$MD5.class")); 
の内側にあります。

何が問題なのですか?

+0

'Signature sign = Signature.getInstance(" MD5withRSA ")を実行すると、' org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi $ MD5'がクラスパスにないと思います。 "、" BC ")'。どちらの場合でもBouncy Castleのバージョンを確認しましたか? – SubOptimal

+0

バージョンは、Webアプリケーションの同じ戦争のjarと同じです。ファイルはクラスパス内になければなりません。それ以外の場合、System.out.println( "---> DigestSignatureSpi" + MD5.class.getResource( "DigestSignatureSpi $ MD5.class"))はどこにあるのかわかりません。 – Gyonder

答えて

1

次のスニペットで出力を確認してください。

AlgoCheck.java

import java.net.URL; 
import java.security.NoSuchAlgorithmException; 
import java.security.NoSuchProviderException; 
import java.security.Security; 
import java.security.Signature; 
import org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi; 
import org.bouncycastle.jce.provider.BouncyCastleProvider; 

public class AlgoCheck { 

public static void main(String[] args) throws NoSuchAlgorithmException, 
    NoSuchProviderException, ClassNotFoundException { 

Security.addProvider(new BouncyCastleProvider()); 
URL bcClassUrl = AlgoCheck.class.getClassLoader() 
     .getResource("org/bouncycastle/jce/provider/BouncyCastleProvider.class"); 
System.out.println("BouncyCastleProvider class URL = " + bcClassUrl); 

ClassLoader loader = DigestSignatureSpi.MD5.class.getClassLoader(); 
URL md5ClassUrl = loader.getResource(
"org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD5.class"); 
System.out.println("DigestSignatureSpi.MD5 class URL = " + md5ClassUrl); 

Signature sign = Signature.getInstance("MD5withRSA", "BC"); 
System.out.println("algorithm = " + sign.getAlgorithm()); 
    } 
} 

クラスBouncyCastleProviderDigestSignatureSpi.MD5がロードされているから、ライブラリが同じである必要があります。

出力例

BouncyCastleProvider class URL = jar:file:/home/suboptimal/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.49/bcprov-jdk15on-1.49.jar!/org/bouncycastle/jce/provider/BouncyCastleProvider.class 
DigestSignatureSpi.MD5 class URL = jar:file:/home/suboptimal/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.49/bcprov-jdk15on-1.49.jar!/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD5.class 
algorithm = MD5withRSA 
-1

これは調和の既知の問題です。 Bouncyジャーをappserverのlib/extディレクトリに置きます。

関連する問題