为什么亚马逊发布私钥而不是公钥?

我的大脑围绕公共钥匙和私人钥匙包裹在车轴上。 当您在Amazon的EC2服务上创build云服务器(实例),然后希望通过SSH连接到它时,Amazon会要求您下载私钥以build立连接。 公钥/私钥背后的想法不是build议亚马逊应该要求你下载一个公共的?

另外,如果我为客户设置了SFTP服务器,我应该在服务器上安装密钥还是从服务器给他们一个密钥? 无论哪种情况,它应该是公钥还是私钥?

更深入地思考authentication过程,需要保密的是什么? 亚马逊知道公众的一半关键, 任何人都可以知道公众的一半。 公钥中的一半与私人私钥匹配时,表示私钥用于validation。

当您为您生成密钥对时,您提供给您的私钥只有在您是唯一拥有私钥的情况下才有用。 如果这不是秘密,那么任何知道这个秘密的人都可以向任何持有公共钥匙的人进行authentication。

无论谁被authentication,都必须持有私人的一半。 如果世界上的每个人都可以通过持有公钥的一半来证实你,那么只有你应该控制私人的一半。

亚马逊提供密钥生成服务,因为一些操作系统(咳嗽,Windows,咳嗽)可能不容易生成SSH密钥对。

使用SSH(和SFTP),公钥在EC2实例启动时安装在用户的authorized_keys文件中。 私钥仅由用户保存,并被呈现为针对服务器进行authentication。

从以下文档:

http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html

亚马逊似乎会在其服务器上生成密钥对,并通过HTTPS向您发送私钥。 这可能不是完美的(理想情况下,你和其他人都不会拥有私钥),但可能并非如此,因为这一切都发生在你authentication的会话中,只有你(和亚马逊暂时)看到私钥。 您也可以始终生成并上传您自己的公用密钥,同时保证私钥的私密性。

为了设置SFTP用户进行密钥validation,他们应该在他们的机器上生成SSH密钥。 一旦他们生成一个密钥对,他们应该只是发送你的公钥安装在相关的authorized_keys文件。 顾名思义,私钥是私有的。

公钥authentication与您可能想的方式相反。 公钥encryption消息,私钥解密。 服务器存储帐户持有人的公钥并使用它来encryption消息。 只有私钥的持有者才能解密该消息。

如果您向某人发送使用公钥encryption的秘密,如果他们能告诉您这个秘密是什么,那么您知道他们持有相匹配的私钥。 用户然后被authentication。

由于安全原因,AWS要求您下载并保存私钥,因为它们不会存储它。 由于私钥不存储在AWS的任何位置,因此您可以确信您的EC2实例是安全的。

从某种意义上说,这并不重要。 私钥/公钥对由两部分组成,其中公共部分由您决定。 如果某个密钥被encryption,则需要另一个密钥解密。 如果您公开发布了一个密钥而不是另一个密钥,则私钥是您没有发布的密钥。

得到你真正的问题:据推测,亚马逊给你的关键是让你控制自己的资源,所以不应该给别人。 在这种情况下,你必须相信亚马逊拥有你的私钥,至less足够长的时间才能build立起来。

如果你想要你的客户以这种方式login,你需要他们给你一个密钥,他们准备与你分享,所以他们的公钥。 您可以在authorized_keys的服务器上安装它,这实际上是说“拥有与此公共密钥匹配的私钥的任何人都可以访问此资源”。