在WSO2 Identity Server的bin目录中运行ciphertool.bat或ciphertool.sh脚本后,下次启动该服务器时,系统会提示您,要求您提供用于以下操作的密钥库和私钥密码:配置WSO2安全库。示例:
C:\Program Files\WSO2\Identity Server\5.7.0\bin>wso2server.bat --start
JAVA_HOME environment variable is set to C:\Program Files\Java\jdk1.8.0_181
CARBON_HOME environment variable is set to C:\PROGRA~1\WSO2\IDENTI~1\570D0D~1.0\bin\..
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[Enter KeyStore and Private Key Password :]
我有一个在Docker容器中运行的WSO2身份服务器实例。我的密码已加密,因此我需要在启动时提供密钥库/专用密钥密码。
这还是一个问题:
我必须使用-it
标志运行我的docker容器,以便在容器中创建一个活动的bash shell,允许我键入密钥库和私钥密码。我的docker run命令看起来像这样docker run -p 443:443 -it wso2-test .
。如果我不包括-it
标志,则WSO2 IS将永远不会要求输入密码,并且密码也不会得到解析,从而导致一切失败。
我不想使用-it
标志,因为它会强制用户输入,我希望容器独立运行。
为了使事情尽可能自动化,我想在运行wso2server.sh
脚本(这是我的Dockerfile的入口点)时而不是在提示时立即提供密钥库和私钥密码被表达。这可能吗?
理想情况下,解决方案将具有一个类似于以下内容的Dockerfile入口点:
ENTRYPOINT ["wso2server.sh", "run", "KEYSTORE_PASSWORD"]
答案 0 :(得分:4)
您应该将密钥库密码作为环境变量传递给docker run
命令。
docker run -e KEY_STORE_PASSWORD=wso2carbon secvault-test:latest
此环境变量应由ENTRYPOINT命令读取,并写入$ PRODUCT_HOME目录下名为password-tmp
的文件中。这是带有ENTRYPOINT的示例Dockerfile:
$>猫Dockerfile
FROM ubuntu:16.04
RUN mkdir /opt/wso2is
WORKDIR /opt/wso2is
ENTRYPOINT ["/bin/sh", "-c", "echo $KEY_STORE_PASSWORD > password-tmp && wso2server.sh run"]
安全检查:
由于未将密码发送到Docker映像中,因此我们可以安全地将映像推送到注册表。此外,每当旋转一个新容器时,您都需要输入环境变量。请注意,可以通过docker inspect
命令看到容器的环境变量。