【问题标题】:How can I delivery private key from server to client safety? [Java]如何将私钥从服务器传送到客户端安全? [爪哇]
【发布时间】:2021-02-09 22:43:29
【问题描述】:

我想在服务器上为客户端生成一个 SSH 密钥对。

我之前的设计是使用rest API将post请求(或者我应该使用get?)发送到后端,然后生成密钥对并将其返回给前端。然后为下载的私钥文件创建 URL。

但似乎以这种方式可能会导致一些安全问题。我对安全不熟悉,所以我实际上不知道安全问题可能导致什么,以及它会发生在哪里。

我希望我能对解决方案有所了解,任何建议或解释都会有所帮助。 谢谢!

【问题讨论】:

    标签: java security download


    【解决方案1】:

    你不能这样做,除非......

    • 您已经有一个用于发送私钥的安全通道,或者
    • 客户端和服务器已经有一个共享密钥或密钥对,可用于创建此类通道。

    但好消息是,如果您的服务器实现了 HTTPS(或类似的基于 SSL 的协议)并且具有适当的 SSL 证书和适当的根 CA,那么客户端创建的到 HTTPS 端点的通道应该是安全的。然后,您需要的只是一种服务器对客户端进行身份验证的方法;例如帐户名 + 密码或客户端证书。 (但这意味着一个共享的秘密......用于向服务器验证客户端。)

    一般来说,对此的解决方案涉及某种引导,从“带外”注入的共享密钥开始;例如在启动映像、首次启动注入或 U 盘中。

    请注意,这种事情真的应该由懂安全的人来设置,因为如果你弄错了,造成的损失可能无法估量。

    所以...

    我想在服务器上为客户端生成一个 SSH 密钥对。

    简单的答案是不要那样做。反过来实现它。在客户端生成密钥对并将公钥发送到服务器。

    【讨论】:

    • 嗨,斯蒂芬,非常感谢您的建议和解释。这很清楚,对我来说很有意义。很高兴我昨天刚刚了解了 HTTPS,因此我了解了您所说的好消息。所以我想知道服务器是否实现了https,用户使用密码登录并且服务器保持这个会话。现在,如果我在前端提供一个简单的下载(如 标签下载),那会安全吗?或者我需要做一些特别的事情来确保这个文件下载在传输过程中通过乐队加密?
    • 如果您使用的是 HTTPS,则通过连接传递的所有数据都经过加密,并且可以防止 3rd 方窃听者。 (假设证书有效且证书的根 CA 未被泄露/破坏,证书的私钥未被泄露。all 安全方案有一些警告...)
    • 非常感谢您的帮助!这很有帮助。我认为我需要对 https 进行更多研究以确保安全性。
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多