Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BouncyCastle 1.51 Wildfly 8.0在战争中加载_Java_Jboss_War_Bouncycastle_Wildfly 8 - Fatal编程技术网

Java BouncyCastle 1.51 Wildfly 8.0在战争中加载

Java BouncyCastle 1.51 Wildfly 8.0在战争中加载,java,jboss,war,bouncycastle,wildfly-8,Java,Jboss,War,Bouncycastle,Wildfly 8,背景 在我的战争中,我试图使用bouncy castle库解密私钥。现在,我首先在一个独立的应用程序中测试了代码,它运行良好。现在,当我在Wildfly8.0中将其作为一个网络应用程序进行测试时,我遇到了一些与Bouncy castle有关的问题 使用的Wildfly 8.0 am安装了bouncy castle提供程序模块。v1.46中使用的BC版本 我开发的代码使用v1.51。 我遵循了这里提到的步骤: -具体遵循中针对特定部署提供的说明(首选) 已尝试过 安装JCE策略文件 添加到

背景

在我的战争中,我试图使用bouncy castle库解密私钥。现在,我首先在一个独立的应用程序中测试了代码,它运行良好。现在,当我在Wildfly8.0中将其作为一个网络应用程序进行测试时,我遇到了一些与Bouncy castle有关的问题

使用的Wildfly 8.0 am安装了bouncy castle提供程序模块。v1.46中使用的BC版本

我开发的代码使用v1.51。 我遵循了这里提到的步骤:

  • -具体遵循中针对特定部署提供的说明(首选)
已尝试过

  • 安装JCE策略文件
  • 添加到提供者列表
问题

我得到的错误是:

unable to read encrypted data: JCE cannot authenticate the provider BC 
以及触发上述错误的代码,如下所示:

PKCS8EncryptedPrivateKeyInfo kp = (PKCS8EncryptedPrivateKeyInfo) keyPair;  
InputDecryptorProvider pkcs8dec = new JceOpenSSLPKCS8DecryptorProviderBuilder()  
      .setProvider(new BouncyCastleProvider())  
      .build("somepass".toCharArray());  
PrivateKeyInfo pko = kp.decryptPrivateKeyInfo(pkcs8dec);<-- ##Error here  
PKCS8EncryptedPrivateKeyInfo kp=(PKCS8EncryptedPrivateKeyInfo)密钥对;
InputDecryptorProvider pkcs8dec=new JceOpenSSLPKCS8DecryptorProviderBuilder()
.setProvider(新的BouncyCastleProvider())
.build(“somepass.tocharray());

PrivateKeyInfo pko=kp.decryptPrivateKeyInfo(pkcs8dec) I.结合Peter(@comment)的想法,创建具有自定义名称的“您自己的bc版本”:

  • 按以下方式创建“my.bouncycastle”模块:

    • 在$JBOSS_HOME/modules下,创建目录“my/bouncycastle/main”。目录“my”可能不在那里

    • 将bcprov-[您的版本].jar复制到我的/bouncycastle/main中

    • my/bouncycastle/main中创建文件“bcprov-[your version].jar.index”,它基本上是
      jar-tf
      命令的输出,没有“.class”行。(管道和编辑…)

      我在顶部放了一个空行,因为这些.index文件似乎总是有一个。我已将此文件作为“bcprov-jdk16-1.46.jar.index”附上

    • 创建一个名为“module.xml”的文件,也在my/bouncycastle/main中,它将指向jar文件并引用模块“javax.api”作为依赖项

      我已将此文件附加为“module.xml”。 模块已完成

  • 由于我是在EAR文件中部署的,所以我必须在我的EAR的META-INF/jboss-deployment-structure.xml文件的下面添加一个模块依赖项,如下所示:
  • (该语句也适用于WAR文件,在顶级部署时,使用自定义名称作为模块参考)

    
    
  • 确保ear的/lib目录不包含bcprov-[您的版本].jar。(实际上是二)
  • 注: 在jboss-dependency-structure.xml文件中,'slot=“main”和'export=“true”参数非常重要

    二,。将maven依赖项调整为:

    已提供
    

    注意:不要将maven依赖性(ies组工件)更改为“my.bouncycastle”,只更改范围,这将确保大多数IDE都具有良好的编译时行为,并防止(maven-)war/jar/ear插件将其打包到libs中!(哪一个是像这样的依赖项的正确范围。)

    您提到的“JBoss AS7:…”问题是“创建一个JBoss模块(一个文件夹[…])。将您希望在其中全局可用的bouncy castle jar与module.xml文件[…]),但上面您说BC jar安装在WEB-INF/lib中。有没有可能您误解了那里的说明?有一个使用BCV1.46的JBoss模块。我想在我的webapp中使用bcv1.51。我无法升级JBoss模块以使用BCV1.51,因为还有其他Web应用程序依赖于v1.46。希望这能说明问题。难道你不能为1.51创建第二个模块吗?我只是想让它尽可能地隔离,并将其保持在war级别似乎是最好的解决方案。JCE api对注册提供商的地图有静态引用。JCE类来自父类加载器。如果两个实现来自不同的类加载器,请尝试将它们自己注册到同一个名称上,并相互覆盖。因此,其中一个用户代码将接收到错误的代码(可能来自它没有访问权限的类加载器)
        <deployment><dependencies><module name="my.bouncycastle" slot="main" export="true"/>  
    
    <scope>provided</scope>