如何使用OpenSSL生成Salt minion密钥对?

时间:2014-08-05 11:59:10

标签: salt-stack

我正在构建Chef cookbook来设置Salt并管理小兵和主人之间的密钥交换。

我知道Salt minion会在/etc/salt/pki/minion/minion.{pem,pub}首次启动时自动生成密钥,但我不能依赖于脚本中何时可以获得信息的时间。

Salt documentation,我可以使用salt-key --gen-keys=[key_name]在主服务器上生成密钥。但是,出于安全考虑,我宁愿在minion上生成密钥,因此只需要公钥即可离开机器。

键看起来像是相当标准的RSA密钥。 openssl或ssh-keygen生成一个可被Salt接受的密钥的参数是什么?我只是在寻找Salt在这样一个密钥中寻找的位长和其他参数。

非常感谢!

3 个答案:

答案 0 :(得分:0)

代码位于salt / crypt.py: https://github.com/saltstack/salt/blob/2014.1/salt/crypt.py#L88

看起来它使用from M2Crypto import RSA,然后使用gen = RSA.gen_key(keysize, 65537, callback=lambda x, y, z: None)

M2Crypto是OpenSSL的包装。

M2Crypto.RSA.gen_key在这里定义:https://github.com/M2Crypto/M2Crypto/blob/master/M2Crypto/RSA.py#L314

返回M2Crypto.RSA.RSA对象。

查找密钥大小并不容易,在config.py中默认为4096: https://github.com/saltstack/salt/blob/1bfed117560fbde11c88ad7a013be76dc6eadf0f/salt/config.py#L409

公钥以PEM格式保存。

所以看起来你可以用OpenSSL做到这一点。我还没有证实这一点。

答案 1 :(得分:0)

我会使用salt-key来创建密钥。

[me@elsapo ~]$ sudo salt-key --gen-keys=minion02 --gen-keys-dir=/tmp/testkey

return:
    37:6e:6d:42:ba:c6:da:1d:46:28:fb:bc:ce:27:10:13:7c:a2:d8:de:f9:d5:ba:6a:01:4a:f4:72:ad:bd:1b:20

[me@elsapo ~]$ ls /tmp/testkey

minion02.pem  minion02.pub

然后,您可以将pem和pub密钥文件移动到任何您想要的位置。

答案 2 :(得分:0)

我也有类似的问题,在Vagrant中使用Salt。正确的解决方案当然总是要运行

salt-key --gen-keys=master

但是,在我的情况下,密钥需要在主机(未安装Salt的主机)上生成,但是Vagrant salt Provisioner希望找到它们,以便将其复制到新的VM。

您可以使用OpenSSL生成它们。生成带有以下内容的私钥:

openssl genrsa -out master.pem

,然后使用以下公用密钥:

openssl rsa -in master.pem -pubout -out master.pub

以这种方式生成的键的默认值似乎与salt-key生成的键相同,但默认值为YMMV。