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

WSO2 Identity Server: How to enter the keystore and private key password in a Dockerized WSO2 identity server

在WSO2身份服务器的bin目录中运行设置ciphertool.bat或ciphertool.sh脚本后,下次启动服务器时,会提示您要求您提供用于配置 WSO2 安全保管库的密钥库和私钥密码。示例:

C:\Program Files\WSO2\Identity Server.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~10D0D~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 :]

我有一个 WSO2 身份服务器实例 运行 在 Docker 容器中。我的密码已加密,因此我需要在启动时提供 keystore/private 密钥密码。

不过这提出了一个问题:

我必须 运行 我的 docker 容器带有 -it 标志,以便在允许我的容器中创建活动的 bash shell输入密钥库和私钥密码。我的 docker 运行 命令看起来像这样 docker run -p 443:443 -it wso2-test .。如果我不包括 -it 标志,WSO2 IS 将永远不会要求输入密码并且密码将无法解析,导致一切失败。

我不想使用 -it 标志,因为它会强制用户输入,我希望容器独立 运行。

为了尽可能保持自动化,我想在 运行 wso2server.sh 脚本(这是我的 Dockerfile),而不是在出现提示时。这可能吗?

理想情况下,解决方案应该有一个 Docker 文件入口点,看起来像这样:

ENTRYPOINT ["wso2server.sh", "run", "KEYSTORE_PASSWORD"]

您应该将密钥库密码作为环境变量传递给 docker run 命令。

docker run -e KEY_STORE_PASSWORD=wso2carbon secvault-test:latest

这个环境变量应该由ENTRYPOINT命令读取,并写入$PRODUCT_HOME目录下名为password-tmp的文件中。这是带有 ENTRYPOINT 的示例 Dockerfile:

$> cat 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 命令查看。