java.io.IOException : parseAlgParameters failed: PBE AlgorithmParameters not available, 当 docker 容器尝试访问 rabbitmq TLS 端口时导致

标签 java docker maven ssl rabbitmq

我正在尝试通过 TLS 端口从运行 maven spring-boot 应用程序客户端的 docker 容器连接到 RabbitMQ 实例。
虽然我已经更新了 java.security 与行:
security.provider.10=org.bouncycaSTLe.jce.provider.BouncyCaSTLeProvider
我还添加了 的 jar充气城堡 在容器内部并通过 maven 安装它,并将依赖项添加到项目的父 pom 中。一个异常不断弹出:

*java.io.IOException: parseAlgParameters failed: PBE AlgorithmParameters not available*

...

*Caused by: java.security.NoSuchAlgorithmException: PBE AlgorithmParameters not available*  
在通过容器运行 Rabbitmq 客户端之前,我在 Ubuntu 操作系统上本地运行它,它运行良好。 ( https://www.rabbitmq.com/ssl.html ,示例 2)
Docker 容器是启用主机的容器,.p12 和 rabbitstore 文件在容器内成功交付。容器使用jdk1.8,通过rabbitmq的非TLS端口连接成功。
异常原因似乎出现在这部分代码中:
 *char[] keyPassphrase = "lerum".toCharArray();*

 *KeyStore ks = KeyStore.getInstance("PKCS12");*

 *ks.load(new FileInputStream("test.p12"), keyPassphrase);*
有谁知道它可以关闭吗?
Dockerfile:
FROM maven:3.6.0-jdk-8 AS build

COPY /test.p12 test.p12

COPY /certification.pem certification.pem

COPY /jdk-8u241-linux-x64.tar.gz .

COPY /Scripts/install-java.sh .

COPY /jdk-8u241-linux-x64.tar.gz .

COPY /bcprov-ext-jdk15to18-167.jar /docker-java-home/jre/lib/ext/

COPY /java.security /docker-java-home/jre/lib/security/

#installing java

RUN  yes | /install-java.sh -f /jdk-8u241-linux-x64.tar.gz

#environmental variables

RUN export JAVA_HOME=/docker-java-home/jre/lib/ext:$JAVA_HOME

#Bouncy Castle install

RUN mvn install:install-file -Dfile=bcprov-ext-jdk15to18-167.jar -DgroupId=org.bouncycastle -DartifactId=bcprov-jdk15on -Dversion=1.67 -Dpackaging=jar

RUN printf 'lerum\lerum\nyes' | keytool -import -alias server1 -file certification.pem -keystore rabbitstore

RUN mvn clean install

ENTRYPOINT ["/bin/bash","irrelevat.sh"]

最佳答案

几个月后回到这里报告我当时修复它的方式,简而言之,我改变了导入新安全库的整个概念。删除了 bouncy-caSTLe 导入,因为它毕竟是不必要的。在名为 Certificates 的文件夹中使用 tls-gen 创建证书,然后修改 Dockerfile,在 Dockerfile 的开头添加以下行。

COPY /Certificates /opt/test/Certificates

RUN keytool -import -alias dockervm -file /opt/test/Certificates/server_certificate.pem -keystore /opt/test/keyStore  -storepass lerum -noprompt
确保 tls-gen 生成的文件被导入到 docker 实例(Certificates 文件夹)的 Rabbitmq 配置中,在 Rabbitmq 配置文件(https://www.rabbitmq.com/ssl.html#enabling-tls)中也有引用。我禁用了兔子的 tcp 监听器,并且还使用了 TLSv1.3,因为 v1.2 存在问题。这解决了问题并达到了我的目的。

关于java.io.IOException : parseAlgParameters failed: PBE AlgorithmParameters not available, 当 docker 容器尝试访问 rabbitmq TLS 端口时导致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64741385/

相关文章:

java - 注释匿名内部类

bash - docker-compose 忽略 DOCKER_HOST

docker - CentOS 6.7 在防火墙后与 Docker 的连接问题

java - 使用 Maven 构建使用嵌入式 JRE 的项目有什么可能、方便的方法?

java - Spring Boot、AWS 应用程序上的 Jackson 数据绑定(bind)依赖项错误

java - 获取Java注解所需的数据

java - 如何获取 HTML 中的 REST 参数

java - 通过 java 套接字发送文件时出错

docker - Dockerized Vue应用程序-我应该使用docker还是node env变量?

java - 使用 Tomcat7 MAVEN 插件部署到 Tomcat 时出现 404 错误