项目场景:
前段时间对接某家银行时需要对请求报文进行加密请求,但是加密的工具是行方提供的工具进行生成的,在读取生成的对应密钥时发生了报错
报错展示
原因分析:
“invalid privatekey” 错误表明你提供的私钥无效或格式不正确,所以优先去检查了私钥文件是否完整,格式是否正确在检查的过程中发现貌似私钥开头的格式和之前不同,于是上网上查了下资料发现最新版本的OpenSSH(7.8及更高版本)会以新的OpenSSH格式生成密钥
OpenSSH(7.8及更高版本)
-----BEGIN OPENSSH PRIVATE KEY-----
之前的版本
-----BEGIN RSA PRIVATE KEY-----
可以看到OpenSSH(7.8及更高版本)格式为OPENSSH,而以前的版本格式为RSA
解决方案:
现在想要解决问题方法无外乎三个:
1:用低版本的的SSH工具,重新生成老版本的密钥。
2:修改密钥格式,让他变成RSA即可
3:生成密钥时指定格式,让他生成对应版本的密钥
由于生成密钥的工具是对方提供的,而且一般情况下普通开发人员也无法去生成密钥只有使用的权限。所以采用了第二种方式
修改密钥格式,把openssh转rsa(实测有效)
ssh-keygen -p -m pem -f path
path为密钥的路径,终端输入命令后会有两次密码输入,分别是之前的密码和生成后的新密码,有密码输密码,无密码回车即可
另外附录一下生成密钥时指定格式的命令,有兴趣的可以试一下
ssh-keygen -m PEM -t rsa
可能遇到的其他问题:
由于密钥文件非本机生成,在转换的过程中会提示文件过于开放是因为文件权限过大使用chmod调整文件权限为600即可
转换命令为
chmod 600 path
path为密钥的路径