关于生成SFTP用SSH2 RSA 2048 PEM格式证书的步骤疑问与求助
生成SFTP用SSH2 RSA 2048 PEM格式证书的步骤疑问与求助
嗨,我来帮你梳理下你遇到的问题,先拆解操作里的误区,再给出完整的正确步骤:
首先澄清几个关键误区
- 你搞错了私钥转SSH2/RFC4716格式的命令:你用的
ssh-keygen -ef ssh_host_rsa_key -mRFC4716其实是从私钥文件里提取公钥,然后转换成RFC4716格式的公钥,根本没转换私钥本身。 - OpenSSH证书签名只认原生格式公钥:这是正常行为!RFC4716(SSH2)是密钥交换用的格式,而SSH证书签名工具只接受OpenSSH原生的
ssh-rsa开头的公钥,不需要用转换后的SSH2格式公钥来签名。 - 术语混淆:第三方说的“PEM格式SSH证书”可能是指RFC4716格式的密钥/证书,或者标准PKCS#8格式的私钥,我们可以覆盖两种情况。
完整的正确步骤
1. 生成RSA 2048密钥对(OpenSSH格式)
这个步骤你是对的,执行命令:
ssh-keygen -f sftp_key -N '' -b 2048 -t rsa
执行后会得到:
sftp_key:OpenSSH格式私钥(开头-----BEGIN OPENSSH PRIVATE KEY-----)sftp_key.pub:OpenSSH格式公钥(开头ssh-rsa)
2. 转换私钥为SSH2/RFC4716格式
如果你需要SSH2格式的私钥,执行以下命令直接转换现有私钥:
ssh-keygen -p -f sftp_key -m RFC4716 -N ''
转换后私钥开头会变成---- BEGIN SSH2 PRIVATE KEY ----,保存为sftp_key(建议先备份原文件再覆盖)。
3. 转换公钥为SSH2/RFC4716格式
不需要手动转换,用命令:
ssh-keygen -e -f sftp_key.pub -m RFC4716 > sftp_key_ssh2.pub
得到的sftp_key_ssh2.pub就是SSH2格式的公钥(开头---- BEGIN SSH2 PUBLIC KEY ----)。
4. 生成CA密钥对并签名SSH证书
如果第三方确实要求CA签名的SSH证书,按以下步骤:
- 先生成CA密钥对(只需要做一次):
ssh-keygen -f sftp_ca_key -N '' -b 2048 -t rsa - 用CA私钥签名你的原生OpenSSH公钥(注意:必须用
sftp_key.pub,不能用转换后的SSH2公钥):
参数说明:ssh-keygen -s sftp_ca_key -I "sftp-user-cert" -n "your-sftp-username" sftp_key.pub-I:给证书加一个标识符(方便管理)-n:指定这个证书允许登录的SFTP用户名(必须和第三方服务器要求的一致)
执行后会生成sftp_key-cert.pub,这就是OpenSSH格式的SSH证书。
5. 转换SSH证书为SSH2/RFC4716(PEM)格式
如果第三方需要PEM格式的证书,把生成的证书转换成RFC4716格式:
ssh-keygen -e -f sftp_key-cert.pub -m RFC4716 > sftp_key-cert_ssh2.pub
6. (可选)转换私钥为标准PKCS#8 PEM格式
如果第三方要求的是标准PEM格式的私钥(不是SSH2格式),执行:
ssh-keygen -p -f sftp_key -m PKCS8 -N ''
转换后私钥开头会变成-----BEGIN PRIVATE KEY-----,这是通用的PEM格式。
针对你卡住的问题的解答
你遇到的“签名只能用原生ssh-rsa公钥”是完全正常的,OpenSSH的证书签名工具只识别自己的原生公钥格式,RFC4716只是用来交换密钥的格式,不是签名用的。你只需要用最初生成的sftp_key.pub来签名,之后再把生成的证书转换成SSH2/PEM格式给第三方就行。
备注:内容来源于stack exchange,提问作者raviv0731
相关产品推荐
相关产品推荐

