这就是为什么你把公钥放在自己的服务器上,用来通过SSH登录进入到服务器。私钥是你贴身带着的。你不允许那些私钥落到别人手里。
但是仍然有问题。以我的git服务器为例。我要做几个决定。有时候,我登录进入到托管在别处的开发服务器。在那台开发服务器上,我需要连接到我的那台git服务器。开发服务器如何才能连接到git服务器?通过使用私钥。而这里就存在问题。这种场景需要我把私钥放在托管在别处的服务器上,这么做可能很危险。
现在看看进一步的场景:如果我使用单一密钥登录进入到多台服务器,会怎样?如果入侵者设法弄到了这样一把私钥,他有了该私钥后可以进而访问整个服务器虚拟网络,准备搞一些严重的破坏。这可不是什么好事。
而这当然引出了另一个问题:我是否应该对另外那些服务器使用同一把密钥?就像我刚才描述的那样,这可能很危险。
最后,这听起来一团糟,不过有一些简单的解决办法。不妨逐一介绍。
(注意:除了仅仅登录进入到服务器外,还有许多地方要用到密钥,不过我介绍这一种场景是为了表明你在处理密钥时面临的问题。)
重视通行码
你在创建密钥时,可以选择添加通行码(passphrase),使用私钥时需要通行码。有了这个通行码,私钥文件本身使用通行码来加密。比如说,如果你将公钥存储在服务器上,使用私钥登录进入到该服务器,就会看到输入通行码的提示。要是没有通行码,密钥就没法使用。另外,你可以配置私钥,一开始没有通行码。那样,你只需要登录进入到服务器的密钥文件。
对用户来说通常不用通行码更容易,但是我强烈建议在许多情况下使用通行码,一个理由是,如果私钥文件被偷,偷走文件的人还是没法使用它,除非他能查明通行码。从理论上来说,这可以为你赢得时间,因为你可以在攻击者发现通行码之前将公钥从服务器上删除,因而保护系统。使用通行码还有其他理由,不过光这个理由就值得我在许多情况下使用它。(举例说,我在安卓平板电脑上装有VNC软件。平板电脑存有我的私钥。如果平板电脑被偷了,我可以立即从平板电脑登录进入的服务器废除公钥,让私钥毫无用处,有没有通行码都没有关系。)不过在一些情况下,我并不使用通行码,因为我登录进入的服务器可能没有太多的宝贵数据在上面。这要看具体情况。
服务器基础设施
你如何设计服务器基础设施将影响到如何管理密钥。比如说,如果你有多个用户要登录,就需要确定每个用户是否获得单独的密钥。(通常来说,他们应该获得单独的密钥;你不希望用户共享私钥。那样一来,如果某个用户离开了企业或者失去了信任,你就可以废除该用户的密钥,没必要为另外每个用户生成新密钥。同样,如果共享密钥,他们就能以彼此的身份登录进去,这同样不好。)但是另一个问题是,你如何分配服务器。比如说,你使用某种工具(比如Puppet)来分配许多服务器吗?是否基于自己的映像来创建多台服务器?如果你复制服务器,每台服务器是否需要有同样的密钥?不同的云服务器软件让你可以配置这方面,具体看你怎么选择了。可以让服务器获得同一密钥,也可以为每台服务器生成新的密钥。
如果你处理的是复制的服务器,要是用户需要使用不同的密钥登录进入到两台其他方面相似的不同服务器,就会让人犯晕。但是另一方面,让几台服务器共享同一密钥存在安全风险。或者另一方面,如果你的密码需要用于登录之外的用途(比如挂载加密的驱动器),那么你就需要同一密钥在多个地方。正如你所见,是否需要在不同的服务器上使用同一密钥不是我可以为你做出的决定;有一些地方需要取舍,你要自行决定什么最合适。
最后,你可能会有:
·需要登录进入的多台服务器;
·登录进入不同服务器的多个用户,每个用户有各自的密钥;
·每个用户有多把密钥,以便登录进入到不同的服务器。
(如果你在其他情况下使用密钥――你可能会这样,说到如何使用密钥,需要多少密钥,是否共享密钥以及你如何处理密钥的公共部分和私密部分,同样的基本概念仍会适用。)
(责任编辑:安博涛)