我想创建用于SSH身份验证的私钥和公钥对。
我不知道这之间的区别:
openssl genrsa -out MyPrivateKey 4096
openssl rsa -in MyPrivateKey -pubout -out MyPublicKey
它首先创建一个私有RSA密钥,然后从中派生出公共密钥,或者:
ssh-keygen -b 4096 -t rsa -f MyFancyKey
会在文件“ MyFancyKey”中创建一个私有RSA密钥,并在“ MyFancyKey.pub”中创建相应的公共密钥。
私钥的结构看起来有些相似,尽管创建的私钥的openssl
开头是:
-----BEGIN RSA PRIVATE KEY-----
而其中的一个ssh-keygen
开始于:
-----BEGIN OPENSSH PRIVATE KEY-----
这两种键之间有根本区别吗?
然后是对应的公共密钥,其中的一个openssl
包含:
-----BEGIN PUBLIC KEY-----
...base64 encoded...
-----BEGIN PUBLIC KEY-----
来自的ssh-keygen
那一行仅包含一行:
ssh-rsa XXXXXX...base64 encoded...XXXXX [email protected]
这些数据本质上是同一种数据,但格式不同吗?还是它们真的不兼容?
我试图全面了解所有这些与SSH的关系。例如,为什么在该密钥中是我的用户名,计算机名和本地网络名,通常不应该使用它来访问其他计算机上的SSH ?在该计算机上使用我的用户名,而不是我自己的用户名。
这两种键之间有根本区别吗?
不,它们本质上是相同的数据。
BEGIN RSA PRIVATE KEY
表示“ PKCS#1”或“ PEM”密钥格式,它是ASN.1 DER序列化结构的Base64编码。这是一个基本的ASN.1序列,包含RSA参数(n,e,d,p,q等)。
OpenSSH的实际上已经传统使用这种格式,以及-因为它已经使用OpenSSL的加密代码,因此,“负载键”和“写密钥”功能,也方便使用。
这意味着您可以ssh-keygen -m PEM
用来生成或转换此类密钥。
BEGIN PRIVATE KEY
指示“ PKCS#8”密钥格式(未加密);内容与上述格式非常相似,相同的RSA参数嵌套在另一个结构中,这表明它确实是RSA密钥。
与PEM相比,PKCS#8格式更清晰地将“有效负载”(密钥算法,加密)与外部Base64包装器分开。它不会改变数据的含义。
OpenSSH也将识别这种格式(由于其用于密钥加载的OpenSSL用法)。
BEGIN OPENSSH PRIVATE KEY
是OpenSSH为OpenSSH发明的格式。这次,它使用SSHv2数据包序列化而不是DER。
OpenSSH现在使用这种格式,以便可以避免完全依赖于OpenSSL,和/或可以在不等待PKIX标准化ASN.1序列化格式的情况下添加新的密钥算法(否则与SSH完全无关),并且然后等待OpenSSL实施它。
PuTTY具有自己的.ppk格式。您可以使用/ usr / bin / puttygen在所有它们之间进行转换。
另请参阅:OpenSSH公钥文件格式?
这些数据本质上是同一种数据,但格式不同吗?
是的,它们本质上是相同的数据。
BEGIN PUBLIC KEY
我相信也是PKCS#8 –因此在Base64内部有一个DER序列化的ASN.1结构,该结构将其标识为RSA密钥,其后是密钥参数(n,e)
单行格式是部分OpenSSH特定的,尽管中央Base64编码的数据与SSHv2协议本身(“在线”)中使用的格式完全相同。您可能会猜到,编码后的数据使用SSHv2数据包序列化-但它仍具有相同的RSA n和e值。
另请参阅:OpenSSH公钥文件格式?
例如,为什么在该密钥中输入我的用户名,计算机名称和本地网络名称
这是一条注释,可帮助您在authorized_keys
文件较长的情况下将此公用密钥与其他公用密钥区分开。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句