Не удается прочитать ключ RSA

# #go #jwt #rsa #pem #jwe

Вопрос:

Мне нужно прочитать закрытый ключ RSA из файла, чтобы подписать JWT. Я использую openssl для создания закрытого ключа. При расшифровке закрытого ключа получается ошибка слишком большой длины

openssl genrsa -des3 -out jwt-private.pem 2048

 func main() {

  penbhytes := `-----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,A30B805A7CC6454D
    
    AOrhSmQZSXu1EjxeJzYlFy2nz6ScUPDqCXEnupExzqFsIFxT4EaJaT PYSzjVfIq
    RwVfzUxPpAUJ1Ch  s 0tKpKrCaPQdNJthMH1mYEb7WCH8wzVmU473Tlw/jKzrNm
    BzVei4YT xRi15 etlv0uuXBGcKcMDD13LQS5qfIrEJI6Eei0LGtKqL  eZDt/Nz
     5R7JP07R0BCXaK 4b op1mpbbSuxoHTJBkSqd2Aqp4uCyNNGHmm6bBlBuItUYeK
    DAGkUK0iqjUTtiCNsuSr0L288BFZj/y4t2b5gydeaZguVTFYta5TcDTHbZ R7/yH
    cx8GeijKzYsLoNfE3BIypNMBBClQJfSgumwky1couZTIh18ik8wQySvtbMo5zav 
    zIRrbaGuGY3pInE5zE7k2okilgVnnjBzCQQOxwgXEp5pysRU06CmjbGtt66FvuoE
    KNDhsHJJX1g8LkqivjVOo2ueBrmLItBJh5fS2gPQIVR7hFj3UcYLH/qY0sVqY7aR
    Nf3g0RsUSJWWnJShdoI4zzQNFoZcaTvbbfQc45n1BBNwxmMDNGUL0xQFiioPiiSm
    D1I01jQarKnBvSgWzK81XiaHkRC25Ni1vMjdZATsXpfjao0q1YPzqchdegW1N8rR
    97JZQzirbxV4n0opupX7fs3Xqlnk9SVhr1nHdYMpia0MFfnhhoUiKLAlIzuGJqz6
    5245JgJ2edecuZQ1SM2HrvLSnmq93b4OUafZrCo6vBZiw0EXFPA/BUfz9 PtFzH2
    CQ4MAeJFs0L8bdPA5XVpyA6p8wTIgmKYT64TOFIzaBCtkJcDBnlNKrEZ/Qu7PUbq
    Miz7uQSXBGOI5myEYR0GUhLGbImQz RpkwNygunjFgBgC7IGFzUfEYpguaUloFPm
    Xgc8/1C6XStluW7f8h7b/K/ U3sCpHKzJdvQz7rptuhs6wtvPVLJse1Ja8E0CnN6
    7S/frRILd9Wal1sRrrZM7fRNYUXCM/3Fz72W55Vp3oKzas4ziBywUvg4LWC4R4yr
    31pJms fyjAxTX3eSuBsdLGrtWKxxri oUYooR6oDAiVCVT9llZwXuOcaPzH7A2x
    AbA g/6t3Qx zNZ9aMKrBTvsaRThW9AU6Dn9P2X7lyRtR/WMHf R72vfcNfaGyu6
    Komn4kXhbDdIMvEVSlAF3lSnA1KE/0B3vWEO8q2Vxp66/OCArzX21hUjJr21JT7U
    7YJ6hHQOpdQoZA 2G7Gef1FTiyKYWN9c0UmAdiaKATwwZtu17/lT8oWRZfkp3sUz
    tPLJ08GD91mWq3ExsjTUGWTKAQSp SDTEJ0SFEw/CH2dhSY/q03eM4cNawVdfDEM
     50NwHzCiiddLGDASFxKbtkLXZa4xxhg5GTv2F9ObXzKPisM7ipTBC52/EvLU1vP
    Rg92CUoBES2JEhS3M6f0hWdFjKMFaMsdOXKyEzytg31bSPDw0BoKV9a7LKSWhsUk
    7U gxl84sDUwEZ6jRqRnOrt9gR4FC/m3Z/Fv8KYy1dgyIO2vlprXfHAxlxRWnBAh
    SfTAKja37lLgaMY84EBxsXKayMhWfGIKAb5WABjZcQcdntV2tIVtZjmZPeP/NA57
    -----END RSA PRIVATE KEY-----`

    //using below code to decrypt the private key

    data, _ := pem.Decode([]byte(pembytes))
    privateKeyImported, err := x509.ParsePKCS1PrivateKey(data.Bytes)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
}

Getting error as length too large
 

Комментарии:

1. Перед первым тире есть пробел: -----BEGIN RSA PRIVATE KEY-----

2. @Jens это не имеет никакого отношения к космосу. это ошибка копирования и вставки, все еще сталкиваюсь с той же проблемой

3. Ключ говорит, что он зашифрован, вы пробовали использовать x509.DecryptPEMBlock , а затем использовать эти выходные данные при анализе ключа?

4. Приведенный выше код не работает. Не могли бы вы привести пример, который воспроизводит ошибку, которую вы описываете? play.golang.org/p/4nJOHR9kkJm .

5. @Jens делится кодом здесь play.golang.org/p/yxbeq09GBAM

Ответ №1:

Ключ говорит, что он зашифрован, Proc-Type: 4,ENCRYPTED поэтому сначала вы должны расшифровать его с помощью пароля, который вы ввели при создании ключа.

 data, _ := pem.Decode([]byte(pembytes))
if data == nil {
    log.Fatalf("bad key data, not PEM-encoded?")
}

pemBytes, err := x509.DecryptPEMBlock(data, []byte("somePassword"))
if err != nil {
    log.Fatalf("failed to decrypt block: %v", err)
}

privateKeyImported, err := x509.ParsePKCS1PrivateKey(pemBytes)
if err != nil {
    log.Fatalf("failed to parse private key: %v", err)
}