1 回答

TA貢獻2012條經驗 獲得超12個贊
是的,我也遇到過這個。
該x509
包不支持ed25519
所使用格式的封送處理密鑰類型openssh
,因此正如您所發現的,此代碼 - 適用于其他密鑰類型 - 對ed25519
密鑰失?。?/p>
bytes, err := x509.MarshalPKCS8PrivateKey(privateKey) // produces invalid output for ed25519 keys
有一個帶有輔助函數edkey.MarshalED25519PrivateKey的 repo ( github.com/mikesmitty/edkey )來解決這個問題:
/* 將 ed25519 私鑰寫入新的 OpenSSH 私鑰格式。我不知道為什么這還沒有在任何地方實現,除了以 OpenSSH 私鑰格式將其寫入磁盤之外,您似乎可以做任何事情。*/
它似乎是仿照 openssh 來源:sshkey.c
sshkey_private_to_blob2
因此,要么將該輔助函數復制到您的代碼中(推薦,因為 repo 已有 5 年以上歷史),要么將其作為導入引用:
import "github.com/mikesmitty/edkey"
pubKey, privKey, _ := ed25519.GenerateKey(rand.Reader)
publicKey, _ := ssh.NewPublicKey(pubKey)
pemKey := &pem.Block{
Type: "OPENSSH PRIVATE KEY",
Bytes: edkey.MarshalED25519PrivateKey(privKey), // <- marshals ed25519 correctly
}
privateKey := pem.EncodeToMemory(pemKey)
authorizedKey := ssh.MarshalAuthorizedKey(publicKey)
_ = ioutil.WriteFile("id_ed25519", privateKey, 0600)
_ = ioutil.WriteFile("id_ed25519.pub", authorizedKey, 0644)
- 1 回答
- 0 關注
- 323 瀏覽
添加回答
舉報