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