我的大脑缠绕在公钥和私钥上。当您在Amazon的EC2服务上创建云服务器(实例),然后想通过SSH连接到它时,Amazon要求您下载私有密钥以建立连接。公钥/私钥背后的想法是否暗示亚马逊应该要求您下载公钥?
此外,如果我设置了供客户使用的SFTP服务器,我应该在服务器上安装他们的密钥还是从服务器提供密钥?无论哪种情况,都应该是公钥还是私钥?
我的大脑缠绕在公钥和私钥上。当您在Amazon的EC2服务上创建云服务器(实例),然后想通过SSH连接到它时,Amazon要求您下载私有密钥以建立连接。公钥/私钥背后的想法是否暗示亚马逊应该要求您下载公钥?
此外,如果我设置了供客户使用的SFTP服务器,我应该在服务器上安装他们的密钥还是从服务器提供密钥?无论哪种情况,都应该是公钥还是私钥?
Answers:
Amazon提供密钥生成服务是因为某些操作系统(咳嗽,Windows,咳嗽)可能不容易生成SSH密钥对。
使用SSH(和SFTP),公钥将在EC2实例启动时安装在用户的authorized_keys文件中。私钥仅由用户持有,并提供以针对服务器进行身份验证。
从以下文档中:
http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html
看来Amazon会在其服务器上生成密钥对,并通过HTTPS向您发送私钥。这可能并不完美(理想情况下,您和其他任何人都不会拥有私钥),但鉴于并非所有情况都如此,因为这一切都是在您的已认证会话的上下文中发生的,并且只有您(和Amazon暂时)看到私钥。您还可以始终生成并上传自己的公钥以供EC2使用,同时将私钥严格保密。
为了设置SFTP用户进行密钥身份验证,他们应该在自己的计算机上生成SSH密钥。一旦他们生成了密钥对,他们应该只向您发送公开密钥以安装在相关的authorized_keys文件中。顾名思义,私钥是私有的。
从某种意义上说,没关系。私钥/公钥对由两部分组成,其中哪一部分是公共的取决于您。如果某事物使用一个密钥加密,则需要另一个密钥对其进行解密。如果您公开发布了一个密钥而不是公开发布,则私钥就是您未发布的密钥。
解决您的实际问题:大概Amazon提供给您的关键是允许您控制自己的资源,因此不应将其提供给其他人。在这种情况下,您必须信任亚马逊拥有您的私钥,至少要足够长的时间才能进行设置。
如果您希望客户以这种方式登录,则需要他们给您提供他们准备与您共享的密钥,因此也要提供他们的公共密钥。将其安装在服务器上的authenticated_keys中,这实际上是在说:“任何提出与该公共密钥匹配的私有密钥的人都可以访问此资源”。