Security 如何在服务器端安全地存储各种密钥?

Security 如何在服务器端安全地存储各种密钥?,security,server,Security,Server,无论是cookie签名、数据库的超级用户用户名和密码,还是JWT令牌签名,在服务器端都有密钥来保护操作 但是,该密钥可能只是服务器代码上的一个普通字符串。我一直在想,是否有更多的程序来保护服务器端的这些密钥字符串?考虑到这一点,例如,如果攻击者设法访问服务器的ssh,那么他很容易获得密钥。或者我应该假设一旦攻击者能够访问服务器,我就已经失去了一切 (这让我认为,将秘密直接放入代码中是每个人都在做的事情,也是常见的做法。)“攻击者成功地访问了服务器的ssh”-那么不管怎样,你几乎死定了。好吧,这可

无论是cookie签名、数据库的超级用户用户名和密码,还是JWT令牌签名,在服务器端都有密钥来保护操作

但是,该密钥可能只是服务器代码上的一个普通字符串。我一直在想,是否有更多的程序来保护服务器端的这些密钥字符串?考虑到这一点,例如,如果攻击者设法访问服务器的
ssh
,那么他很容易获得密钥。或者我应该假设一旦攻击者能够访问服务器,我就已经失去了一切


(这让我认为,将秘密直接放入代码中是每个人都在做的事情,也是常见的做法。)

“攻击者成功地访问了服务器的ssh”-那么不管怎样,你几乎死定了。好吧,这可能太苛刻了,仅仅服务器代码如何?(像Node.js的
server.js
和相关文件)但最初我认为要能够访问这些服务器代码,攻击者很可能已经有了
ssh
访问权限。另一种方法可能是攻击者可以只攻击SQL数据库,但这意味着如果我将密钥直接放在代码文件中,就可以更安全地防止数据库被攻击。(这让我认为,将机密直接放入代码中是每个人都在做的事情)您不会将机密放入VCS存储库(您正在使用的,对吗?),这意味着它们也不能在代码中。您通常将它们放在服务器上的配置文件中,或者将它们设置为运行服务器的用户的环境变量。这意味着,如果攻击者可以访问代码(他们可以访问服务器),他们很可能会执行与代码相同的操作,这意味着他们可以获取机密。这大致可以归结为:1)你不会完全泄露服务器上的任何信息,2)你不允许攻击者对服务器进行任何形式的访问(SSH、FTP、代码中的代码执行漏洞等)。如果攻击者能够获得其中任何一个,您通常会感到厌烦,而更详细地担心这一点通常是浪费时间。