在Java Web应用程序中,您将密钥存储在何处?
密码学是一种广泛采用的确保机密性的技术。不考虑实现缺陷,它只有一个关键点:密钥存储。如果密钥被盗,整个系统将受到威胁 编辑: 让我具体说明问题的来龙去脉:在Java Web应用程序中,您将密钥存储在何处?,java,web-applications,encryption,Java,Web Applications,Encryption,密码学是一种广泛采用的确保机密性的技术。不考虑实现缺陷,它只有一个关键点:密钥存储。如果密钥被盗,整个系统将受到威胁 编辑: 让我具体说明问题的来龙去脉: 这里介绍一个JavaWeb应用程序 更具体地说,它用于spring框架版本3 spring security 3.1用于保护应用程序 mysql5数据库可用 应用服务器是tomcat6或tomcat7 服务器计算机不在我的控制下 也许问题可以集中在这个场景上,但正如所指出的,密钥存储的问题与所采用的技术是横向的。然而,有些库可能会提供一些独特
.war
包中?如何防止未经授权访问源谢谢你不管你需要什么,你总是需要把秘密钥匙存放在某个地方。即使您决定(这是愚蠢的)手动提供密钥,该密钥仍驻留在内存中,有人可以找到它 存放地点取决于您的选择。但是,它不应该是纯文本。所以,若您在数据库中存储了一个密钥,那个么在应用程序中使用硬编码的辅助密钥。因此,如果入侵者只能访问数据库,则加密的主密钥受到保护 我会选择应用程序配置,将辅助密钥存储在容器中。这样,只有您的应用程序才能访问此属性。因此,攻击者必须控制您的应用程序或容器才能访问该密钥 因此,假设以下情况:
锁越多,你就越安全。与标准门锁一样。锁应该来自不同的供应商,并且具有不同的机制。但是到头来,技术娴熟的窃贼还是会介入进来。即使这与JavaWeb应用程序没有任何关系,我还是冒昧地写了一个答案:我认为问题只存在于所有平台的微小差异中 基本上,密钥存储有3个候选项,您提到的前2个:
- DB
- 应用程序(“硬编码”)
- 运行WebApp的服务器上的其他位置,通常是一个文件
- 同一个应用程序的不同实例可以很容易地拥有不同的密钥,因此一个应用程序的折衷方案不会自动传播到所有其他应用程序
- 如果服务器受到某种程度的破坏,允许攻击者读取任何文件,那么游戏就结束了:你无法阻止他读取应用程序二进制文件或数据库
- web服务器上的文件系统安全性是一个非常容易理解的主题
- 与应用程序或数据库入侵相比,允许完全文件系统访问的入侵在统计上要少得多