我有一个托管在云上的JVM应用程序,需要一个密钥才能完成。 我已经考虑了各种方法来为应用程序提供此密钥。该应用程序可以在Windows或Linux上运行。
set someInnocuousName=secretkey
);使用System.getenv
。-DsomeInnocuousName=secretkey
),使用System.getProperty
读取密钥并使用System.setProperty
重置属性。)我可以做3 AND 1或2。 在服务器泄露的情况下,1或2中哪一个更安全? 我倾向于2.一旦我使用JVM参数提供密钥,我能够“覆盖它的轨道”吗?
1和2的优点和缺点是什么?
欢迎任何其他存储密钥的建议。
答案 0 :(得分:0)
我遇到了同样的问题并使用了选项2:
String sharedKey = System.getProperty("aeriosKey");
if (Strings.isNullOrEmpty(sharedKey)) {
LoggerFactory.getLogger(Ingestor.class).error("System property aeriosKey must be set");
return;
}
String s3env = System.getProperty(S3ENV, DEFAULT_S3_ENV);
String s3accessKey = System.getProperty(S3ACCESS_KEY);
String s3secretKey = System.getProperty(S3SECRET_KEY);
if (!ALLOWED_S3_ENVS.contains(s3env)) {
error("System property s3env must be unset or one of [" + String.join(",", ALLOWED_S3_ENVS) + "]");
return;
}
if (Strings.isNullOrEmpty(s3accessKey) || Strings.isNullOrEmpty(s3secretKey)) {
error("System properties s3accessKey and s3secretKey must be set");
return;
}
这样做的好处是您可以通过更改.properties文件轻松切换密钥,并且只有在需要时才能使该文件对正在运行该特定进程的用户可读。环境变量更加分离,并且可以被特定环境中的任何进程读取。
答案 1 :(得分:0)
在Windows和Linux中,在命令行上键入“ history”,您将明白为什么在命令行中添加秘密内容是一个坏主意。如果这样还不吓您“ Google”存储在“我的命令历史记录存储在哪里”和“黑客如何访问我的命令历史记录”呢?
首选方法是使用“特权访问管理器”应用程序,例如CyberArk或Thycotic或Centrify。另一种选择是公用密钥和专用密钥以及SSH。这样可以进行无密码身份验证,并且被认为是安全的。
最坏的情况是,使用具有SALT和安全加密算法的密钥。 。 。并确保密钥是安全的(顺便说一句,在当今世界,“安全”是很难的)。
那里有很多渗透测试公司。您可以尝试致电给他们。如果他们过得愉快,您可能会得到免费建议。