同事们,我在我的spring-boot项目中使用了Jasypt(在Windows上运行的独立jar)。 我需要通过命令行传递主密码来运行jar。 它看起来像:
java -jar -Djasypt.encryptor.password=masterpass app-1.0.0-RELEASE.jar
所以任何人都可以通过Windows任务管理器看到masterpass
:
如何保护此主通道?
我找到了一个示例,其中主密码存储在Windows环境变量中,但似乎并不是一个好主意。
答案 0 :(得分:0)
在客户端工作站上运行时,通常很难隐藏任何内容。最后 - 当密码/密钥被加密时,您需要将密码或私钥存储在某处:/
您可以对数据进行编码/加密以使其更加困难,但是一旦二进制文件和配置位于客户端,您就不会轻易地阻止专用对手。
如果您至少不想在外面显示密码(在环境或命令行中) - 如何在运行前从文件中读取主密码并在main
中设置系统属性其他什么?
(如果有效,请告诉我)
答案 1 :(得分:0)
至少您不应该通过命令行选项提供主密码,就好像其他用户可以访问该计算机的机器一样,他们可以从进程列表中检索该密码。
而是通过单独的配置文件提供它。因此,如果您使用的是spring-boot并在config / application.properties中拥有常规的env属性,则只需添加仅具有主密码的config / application.yml文件,然后仅在具有用户权限的机器上保存该文件(chmod去-rxw)。参见例如这里: https://github.com/oasp/oasp4j/wiki/guide-configuration#password-encryption
安装中的所有其他内容都可能来自您的git repo,那里具有访问权限的人只能看到加密的密码,但不能解密,除非他们拥有主密码,而他们没有对生产机的物理访问权就没有了。操作员可能仅将密码加密提供给开发团队,因此他们永远不知道实际密码。 DevOps专家可能不喜欢这种方式,但是将密码保密给最少数量的管理员通常可以确保安全。