![](/img/trans.png)
[英]'java.io.IOException: parseAlgParameters failed: PBE AlgorithmParameters not available' on RHEL 8.3 with FIPS mode enabled
[英]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.