java - BouncyCastle 1.51 cargando en guerra contra Wildfly 8.0
jboss war (1)
I. Combinando la idea de Peter (@comment) y https://developer.jboss.org/thread/175395 , crea "tu propia versión de bc" con un nombre personalizado:
Cree un módulo '' my .bouncycastle'' de la siguiente manera:
En $ JBOSS_HOME / modules, cree el directorio '' my / bouncycastle / main''. El directorio '' mi '' podría no estar allí. ;)
Copie bcprov- [su-versión] .jar en my / bouncycastle / main
Cree el archivo ''bcprov- [su-versión] .jar.index'' en my / bouncycastle / main, que es básicamente el resultado de un comando
jar -tf
sin las líneas ".class". (canalizar y editar ...)Puse una línea en blanco en la parte superior porque estos archivos .index siempre parecen tener uno. He adjuntado este archivo como "bcprov-jdk16-1.46.jar.index".
Cree un archivo llamado "module.xml", también en my / bouncycastle / main, que apuntará al archivo jar y al módulo de referencia "javax.api" como una dependencia.
He adjuntado este archivo como ''module.xml''. El módulo está completo.
- Como estoy implementando en un archivo EAR, tuve que agregar una entrada de dependencia de módulo al archivo META-INF / jboss-deployment-structure.xml de mi EAR, de la siguiente manera:
(la declaración también se aplica a los archivos WAR, cuando se implementan en el nivel superior, usan el nombre personalizado como referencia del módulo)
<deployment><dependencies><module name="my.bouncycastle" slot="main" export="true"/>
- Asegúrese de que el directorio ear / lib NO contenga bcprov- [su-versión] .jar. (en realidad, II)
Notas: Los parámetros ''slot = "main" y'' export = ''true'' son muy importantes en el archivo jboss-dependency-structure.xml ...
II. Ajusta tu (s) dependencia (s) maven a:
<scope>provided</scope>
Nota: No cambie la dependencia del maven (artefactos grupales) a "my.bouncycastle", solo el alcance, esto le asegurará un buen comportamiento en tiempo de compilación por parte de la mayoría de los IDE Y evitará su guerra (maven) jar / ear-plugin de empaquetarlo en libs! (Y que de todos modos sería el alcance correcto para una dependencia como esta).
Fondo
Intento usar una biblioteca hinchable de castillos para descifrar claves privadas en mi guerra. Ahora probé el código primero en una aplicación independiente y funcionó bien. Ahora cuando lo estoy probando como una aplicación web en Wildfly8.0 estoy enfrentando algunos problemas con Bouncy Castle.
El Wildfly 8.0 am usando el módulo de proveedor de castillo hinchable instalado. La versión BC que se usa en v1.46.
El código que he desarrollado usa v1.51. He seguido los pasos mencionados aquí:
- https://developer.jboss.org/thread/175395
- bouncycastle + JBoss AS7: JCE no puede autenticar al proveedor BC - Instrucciones seguidas específicamente en Para un despliegue específico (preferido)
Ya probado
- Instalar los archivos de políticas de JCE.
- Agregar a la lista de proveedores.
Problema
El error que estoy recibiendo es:
unable to read encrypted data: JCE cannot authenticate the provider BC
Y el código que desencadena el error anterior, de la siguiente manera:
PKCS8EncryptedPrivateKeyInfo kp = (PKCS8EncryptedPrivateKeyInfo) keyPair;
InputDecryptorProvider pkcs8dec = new JceOpenSSLPKCS8DecryptorProviderBuilder()
.setProvider(new BouncyCastleProvider())
.build("somepass".toCharArray());
PrivateKeyInfo pko = kp.decryptPrivateKeyInfo(pkcs8dec);<-- ##Error here
También para agregar los detalles, en mi pom.xml he agregado el jar con scope de compilación, por lo que las libs se copian en la guerra y se instalan en WEB-INF / lib.
¿Algún consejo para solucionar el problema anterior?