背景
我们正在开发一个执行加密操作的 Spring 应用程序。项目的要求是这个应用程序的实现应该独立于 HSM 特定的库(因为客户端可能有任何 HSM),因此我们使用了 SunPKCS11 接口。SunPKCS11 接口需要一个 HSM 库文件的路径,该文件实现了常见的 PKCS11 接口。这样,任何具有库实现 PKCS11 接口的 HSM 都可以与应用程序一起使用。
当前状态
我们有用于测试 HSM 安装位置的主机。HSM 安装程序还提供了实现 PKCS11 接口的库。我们计划使用 Docker 部署这个应用程序。由于应用程序应该独立于 HSM 库,因此我们创建了 docker 映像,其中没有提及 HSM 特定信息。但是,我们使用 docker-compose 文件挂载了 HSM 的完整 lib 文件夹(其中存在 PKCS11 实现库)。当我们执行 docker-compose up 时,它会为属于 HSM 的库提供错误(尽管它安装在 lib 文件夹中)。
加载共享库 xxx.so 时出错
问题
- 在这种情况下我应该使用 docker 吗?我在互联网上看到了使用 docker 访问设备的讨论,答案主要是使用其他一些特定于设备的 docker 映像。但是,我不知道要与应用程序(在客户端)一起使用的 HSM 是否会有这样的 docker 映像。
- 如果是这样,挂载 HSM 的 lib 文件夹是个好主意吗?在 HSM 安装期间,我安装了 3 个 rpm 文件。这 3 个安装可能具有与 HSM 交互所需的其他库。
- 如果我正在做的是正确的方法,错误的原因是什么?
Dockerfile
FROM some/url/xxxbuild:openjdk8u151-alpine3.7-1.0.0
LABEL maintainer "Team"
ENV APP_USER myapp
ENV APP_HOME /opt/my/app
USER $APP_USER
RUN madir -p $APP_HOME/config
码头工人撰写文件
my-microservice:
image: my-microservice:1.1.0-SNAPSHOT
container_name: my-microservice-container
restart: on-failure
environment:
SERVER_PORT: 9999
JAVA_OPTS: -Dlog4j.configurationFile=/opt/gd/app/config/log4j2.xml
ports:
- 8888:9999
volumes:
- ./applicationSpecificFile:/opt/gd/app/config
- /opt/hsm/lib:/opt/hsm/lib <-- HSM Specific lib files
我是 Docker 和 Linux 的新手。让我知道,以防我错过提及某些事情。