WSO2身份服务器:如何在Dockerized WSO2身份服务器中输入密钥库和私钥密码

时间:2019-01-02 18:54:49

标签: wso2 wso2is

在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"]

1 个答案:

答案 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命令看到容器的环境变量。