我正在尝试将 RSA 密钥对导入到旧版本的 Cisco IOS (16.6.4)。旧版本似乎只接受使用 DES 或 3DES 加密的 PEM 编码私钥。至少,在导出在 IOS 上生成的密钥对时,这些密码是唯一的选项:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,AD1E5D9E9F639C34
5Mjt+X9hZ6UCEi12axx6YTf4tvrf4xs61+90/YaGAZPPcL+Tyk2AKtq8jY5kzQxf
...
8K0+Fl8xKFtTdnaiyuN1jKgBg7WcwkmlBAmh3UxrmQ5awuuZUETuiA==
-----END RSA PRIVATE KEY-----
这是一个 PKCS#1 加密的 PEM 编码文件。
我想从我的 Linux 机器导入生成的密钥对。我认为我需要的文件看起来像上面显示的导出文件,使用 DES 或 3DES 加密。这是我失败的尝试。
首先,我使用 OpenSSL 3.4.0 生成一个未加密的 RSA 密钥对:
$ openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:1024 \
-out key.pem -outpubkey pub.pem
$ cat key.pem
-----BEGIN PRIVATE KEY-----
MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBAOC7vNjQatCODHKq
...
ImgXjyNR9xs=
-----END PRIVATE KEY-----
看起来这是一个 PKCS#8 编码的私钥(BEGIN PRIVATE KEY
vs BEGIN RSA PRIVATE KEY
;还openssl asn1parse
显示了一个将其标识为二进制 blob 的结构rsaEncryption
,而不仅仅是私钥材料的转储)。
我读到ssh-keygen
可以将 PKCS#8 转换为 PKCS#1 并对其进行加密。
我的 OpenSSH 版本(9.9p1)显示为ssh-keygen(1)
:
-Z 密码
指定写入 OpenSSH 格式私钥文件时用于加密的密码。可以使用“ssh -Q cipher”获取可用密码列表。默认值为“aes256-ctr”。
因此我列出了 SSH 知道的所有密码:
$ssh -Q cipher
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
aes128-ctr
aes192-ctr
aes256-ctr
[email protected]
[email protected]
[email protected]
然后我尝试:
$ ssh-keygen -Z 3des-cbc -f key.pem -m pem -p -N foobarbaz
Your identification has been saved with the new passphrase.
然而:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,40F4524E862B346BC384C20AEEC89C1C
VhjXes5OMDEfIkSiGWI89v2jZlxiPJ3KpBfhI0fr3d1ffVXvATK6F3K86SFfvikY
...
7K6eCoJ1+LE/e71Nrsm/SW3qcPJIEP3I8+DtwGerw5TYIH2wnFv/J6X6zfnLJjDn
-----END RSA PRIVATE KEY-----
它说它使用 AES-128-CBC 加密,尽管被告知要使用
3des-cbc
(尽管手册说这aes-256-ctr
是默认设置)。无论我从 中输入什么可用的密码ssh -Q cipher
,它总是会输出一个使用 AES-128-CBC 的文件。
我哪里做错了或者我忽略了什么?
编辑
仔细阅读后,我注意到手册上写着
指定在写入OpenSSH 格式的私钥文件时用于加密的密码 。
确实如此:
$ ssh-keygen -Z 3des-cbc -p -N foobarbaz -f priv.key
$ tail -n +2 priv.key | head -n -1 | base64 -d | xxd -l 32
00000000: 6f70 656e 7373 682d 6b65 792d 7631 0000 openssh-key-v1..
00000010: 0000 0833 6465 732d 6362 6300 0000 0662 ...3des-cbc....b
因此,它在转换为 PEM 时使用 AES-128-CBC,但-Z
在使用其自己的格式时会尊重开关。
新问题
那么问题就变成了:我可以使用什么工具用 3DES 加密我的私人 RSA 密钥?