ssh-keygen是用于生成ssh密钥对的程序,可以生成多种非对称加密(如RSA、ECC等)的密钥对,用于SSH登录认证或者其他需要使用签名的场合等等(如Github登录或仓库Actions的运行等)。
openssl&ssh-keygen
两种生成密钥对的方法
使用ssh-keygen
加对应的选项参数即可生成相关的密钥对,生成一个默认的密钥对只需要运行ssh-keygen
按照提示操作(默认目录是在家目录的.ssh目录中),以下是使用参数生成的密钥对,并指定目录
|
|
生成RSA密钥对(1024bits)
|
|
openssl读取私钥
使用openssl读取私钥
|
|
私钥结构
RSA私钥
一个RSA私钥的结构中包含了如下的几个部分。
- $\text{n}$模数
- $\text{e}$公共指数,默认为65537
- $\text{d}$私钥
- $\text{p(q)}$第一个大质数
- $\text{q(p)}$第二个大质数
- $\text{dp}:d\pmod{p-1}$dp
- $\text{dq}:d\pmod{q-1}$dq
- $\text{coefficient}:q^{-1}\pmod{p}$
使用Python读取RSA私钥
|
|
密钥格式
输入的命令不同,生成的私钥内容也是有去别的,如果使用默认的ssh-keygen
生成的私钥文件是无法通过Openssl直接读取的,如果想要通过Openssl命令读取rsa私钥文件,需要在生成的时候使用openssl
命令。
这两种文件格式的开头和结尾也有区别,如果使用ssh-keygen
命令直接创建,开头和结尾为:-----BEGIN OPENSSH PRIVATE KEY-----
和-----END OPENSSH PRIVATE KEY-----
此时生成的是ssh的密钥;如果使用Openssl命令并指定的加密算法创建密钥对,生成的密钥对的开头和结尾是:-----BEGIN PRIVATE KEY-----
和-----END PRIVATE KEY-----
,这两种密钥对形式有相似,但是并不是一样的密钥类型,无法使用openssl rsa .....
命令读取ssh-keygen生成的ssh密钥,所以使用openssl命令读取ssh-keygen的私钥的时候无法成功。
Reference
[For valid PEM I get unable to load private key by openssh](https://superuser.com/questions/1679344/for-valid-pem-i-get-unable-to-load-private-key-by-openssh)
RECOVERING A FULL PEM PRIVATE KEY WHEN HALF OF IT IS REDACTED