繁体   English   中英

java.io.IOException: parseAlgParameters failed: PBE AlgorithmParameters 不可用,当 docker 容器尝试访问 rabbitmq TLS 端口时引起

[英]java.io.IOException: parseAlgParameters failed: PBE AlgorithmParameters not available, caused when docker container tries to access rabbitmq TLS port

我正在尝试通过来自运行 maven spring-boot 应用程序客户端的 docker 容器的 TLS 端口连接到 RabbitMQ 实例。

虽然我已经用以下行更新了java.security

security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

并且我还在容器内添加了Bouncy Castle的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 实例(证书文件夹)中的 Rabbitmq 配置中,在 Rabbitmq 配置文件( https://www.rabbitmq.com/ssl.html#enabling-tls )中也被引用)。 我禁用了兔子的 tcp 侦听器,并且还使用了 TLSv1.3,因为 v1.2 有问题。 这解决了问题并达到了我的目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM