以安全的方式通过脚本生成SSH密钥对

时间:2011-04-28 15:15:17

标签: scripting ssh-keys

我需要生成一个SSH密钥对,我将在稍后的程序中使用它,因此需要它们作为字符串。不幸的是,ssh-keygen实用程序不支持将密钥写入STDOUT或类似的东西。

因此,“下一个最好的事情”就是让ssh-keygen将其输出写入临时文件,然后我可以将其读回到程序中。但这会增加系统中其他人读取私钥文件的风险(该脚本将由Web应用程序运行)。

如何以安全的方式生成密钥对?

1 个答案:

答案 0 :(得分:0)

没有完全安全的方法来生成用于分发的私钥;最安全的方法是让每个客户端生成其密钥对,并仅传输公钥。

但是,如果您处于无法正常工作的状态,并且您致力于集中生成密钥对,则可以选择一些选项。

有硬件安全模块(HSM)为您执行此操作。如果你负担得起,这是最好的方式。

失败:

  1. 确保您的网络应用程序或密钥生成器包装器在其自己的用户下运行(对于本答复的其余部分,我将此用户称为“kguser”)。
  2. 使用权限0700(使用chmod设置)创建kguser拥有的非Web可访问目录
  3. 确保您的密钥生成器包装设置'umask 0177';这应该确保它创建的任何文件都是0600(只有kguser能够读写)
  4. 生成指定难以猜测的密钥(例如,随机UUID)文件名
  5. chmod 0600生成密钥文件时,以防万一您的umask设置不成立或更改
  6. 通过SSL / TLS连接传输私钥
  7. 安全地删除私钥文件(例如Linux上的“shred”)
  8. 使用cron作业定期查找并安全删除超过几分钟的任何私钥文件(清理由于应用程序错误,崩溃等原因而遗留的任何文件)。
  9. 如果您真的很偏执,您还可以确保在磁盘上加密密钥,方法是让您的Web应用程序使用自己的对称密钥在写入时加密,并在发送给用户时解密。然而,这开辟了更多关键管理来搞砸,所以我不推荐它。

    如果您从未将密码短语存储到磁盘,那么在密钥上设置密码短语也会有很大帮助。如果有人设法恢复密码保护密钥,他们仍然必须猜测密钥的密码是有用的。但是,这也意味着您的用户在使用密钥时必须提供密码 - 这可能是也可能是不可接受的。