在保护 https 密钥库时,Wildfly 保险库 (JCEKS) 有什么意义?
What's the point of the Wildfly vault (JCEKS) when securing the https keystore?
我觉得我完全错过了 Wildfly 中新的 JCEKS 密钥库格式的要点。也许你可以让我直截了当。
我们配置 Wildfly 的方式(很多 Internet 都指导我们这样做,):
- 我们将标准密钥库条目放入标准 Java 密钥库 ("keystore.jks") 文件中,并带有密码 ("jks_pw")
- 然后我们使用密码、salt 和循环计数 ("jceks_s_n") 创建 JCEKS 密钥库 ("keystore.jceks")。
- 然后我们将"pks_pw"放入"keystore.jceks"
- 然后我们将 JCEKS password/etc ("jceks_s_n") 作为纯文本添加到我们的 jboss 配置 (standalone.xml) 中,定义一个条目
- 然后我们将对保管库存储的 JKS 密码的引用添加到我们的 jboss https 连接器 (standalone.xml),如 "password="${VAULT::jks::jks: :1}".
这一切到底完成了什么???
如果我们只使用 JKS 文件和嵌入 standalone.xml 的密码,系统容易受到:
- 攻击者获得了 standalone.xml 和 JKS 文件的副本,在这种情况下,所有的秘密都是已知的。
- 攻击者获取 JKS 文件的副本,在这种情况下,攻击者可以使用暴力或查找 table 攻击。
如果我们以描述的方式使用 JCEKS 容器,系统容易受到:
- (相同)攻击者获得 standalone.xml 的副本,即 JKS/JCEKS 文件,在这种情况下所有秘密都是已知的。
- (相同)攻击者获取 JKS 文件的副本,在这种情况下,攻击者可以使用暴力或查找 table 攻击。
如果我们将实际证书放入 JCEKS 文件中,这将有点意义,在这种情况下,暴力和查找 table 攻击在第二种攻击情况下会更难,但到目前为止我还没有找到直接将 JCEKS 格式的密钥库与 https 连接器一起使用的方法。
真的,我太在意这个的唯一原因是我们显然有使用 "vault" 的安全要求,但这似乎毫无意义。
更新:值得注意的是,通过使用保管库,您在 jboss 配置文件中使用了保管库的 "masked" 密码,但我不明白这是什么意思.显然,您的屏蔽密码 + salt + rounds 可以解锁 JCEKS 密钥库 (source),所以我不确定屏蔽到底完成了什么。它看起来像是第三级重定向。我一定是遗漏了什么...
JBoss 声明 "vault" 背后的安全机制是隐蔽式安全 (https://developer.jboss.org/wiki/JBossAS7SecuringPasswords)
How secure is this?
- The default implementation of the vault utlizes a Java KeyStore. Its configuration uses Password Based Encryption, which is security by obscurity. This is not 100% security. It only gets away from the problem of clear text passwords in configuration files. There is always a weak link. (As mentallurg suggests in the comments, the keystore password is the weakest link).
- Ideally, 3rd party ISV robust implementations of Vaults should provide the necessary security.
Vault 使用未知密码和算法对密钥库密码进行对称加密。没有 HSM,你将永远面临 "where store the, e.g., datasource password" 的问题。所以通常你会定义一个带有访问控制列表的 属性 文件并将编码的密码存储在那里。
保管库只是增加了获取安全密码的工作量,让攻击者要么读取内存中的密码,要么对保管库加密算法 + 密钥进行逆向工程。
重要的是要了解 "vault" 背后的安全机制是隐蔽式安全,这意味着您只是在屏蔽您的敏感数据。这意味着如果攻击者可以访问您的 standalone.xml 和密钥库,他就可以轻松读取您的所有数据。
保险库 "increases the effort" -> 攻击者无法直接看到它们,但需要一些(一点点)努力。
我觉得我完全错过了 Wildfly 中新的 JCEKS 密钥库格式的要点。也许你可以让我直截了当。
我们配置 Wildfly 的方式(很多 Internet 都指导我们这样做,
- 我们将标准密钥库条目放入标准 Java 密钥库 ("keystore.jks") 文件中,并带有密码 ("jks_pw")
- 然后我们使用密码、salt 和循环计数 ("jceks_s_n") 创建 JCEKS 密钥库 ("keystore.jceks")。
- 然后我们将"pks_pw"放入"keystore.jceks"
- 然后我们将 JCEKS password/etc ("jceks_s_n") 作为纯文本添加到我们的 jboss 配置 (standalone.xml) 中,定义一个条目
- 然后我们将对保管库存储的 JKS 密码的引用添加到我们的 jboss https 连接器 (standalone.xml),如 "password="${VAULT::jks::jks: :1}".
这一切到底完成了什么???
如果我们只使用 JKS 文件和嵌入 standalone.xml 的密码,系统容易受到:
- 攻击者获得了 standalone.xml 和 JKS 文件的副本,在这种情况下,所有的秘密都是已知的。
- 攻击者获取 JKS 文件的副本,在这种情况下,攻击者可以使用暴力或查找 table 攻击。
如果我们以描述的方式使用 JCEKS 容器,系统容易受到:
- (相同)攻击者获得 standalone.xml 的副本,即 JKS/JCEKS 文件,在这种情况下所有秘密都是已知的。
- (相同)攻击者获取 JKS 文件的副本,在这种情况下,攻击者可以使用暴力或查找 table 攻击。
如果我们将实际证书放入 JCEKS 文件中,这将有点意义,在这种情况下,暴力和查找 table 攻击在第二种攻击情况下会更难,但到目前为止我还没有找到直接将 JCEKS 格式的密钥库与 https 连接器一起使用的方法。
真的,我太在意这个的唯一原因是我们显然有使用 "vault" 的安全要求,但这似乎毫无意义。
更新:值得注意的是,通过使用保管库,您在 jboss 配置文件中使用了保管库的 "masked" 密码,但我不明白这是什么意思.显然,您的屏蔽密码 + salt + rounds 可以解锁 JCEKS 密钥库 (source),所以我不确定屏蔽到底完成了什么。它看起来像是第三级重定向。我一定是遗漏了什么...
JBoss 声明 "vault" 背后的安全机制是隐蔽式安全 (https://developer.jboss.org/wiki/JBossAS7SecuringPasswords)
How secure is this?
- The default implementation of the vault utlizes a Java KeyStore. Its configuration uses Password Based Encryption, which is security by obscurity. This is not 100% security. It only gets away from the problem of clear text passwords in configuration files. There is always a weak link. (As mentallurg suggests in the comments, the keystore password is the weakest link).
- Ideally, 3rd party ISV robust implementations of Vaults should provide the necessary security.
Vault 使用未知密码和算法对密钥库密码进行对称加密。没有 HSM,你将永远面临 "where store the, e.g., datasource password" 的问题。所以通常你会定义一个带有访问控制列表的 属性 文件并将编码的密码存储在那里。
保管库只是增加了获取安全密码的工作量,让攻击者要么读取内存中的密码,要么对保管库加密算法 + 密钥进行逆向工程。
重要的是要了解 "vault" 背后的安全机制是隐蔽式安全,这意味着您只是在屏蔽您的敏感数据。这意味着如果攻击者可以访问您的 standalone.xml 和密钥库,他就可以轻松读取您的所有数据。 保险库 "increases the effort" -> 攻击者无法直接看到它们,但需要一些(一点点)努力。