質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

1回答

1925閲覧

panic: runtime error: invalid memory address or nil pointer dereference

tuioku

総合スコア42

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2022/09/22 10:25

panic: runtime error: invalid memory address or nil pointer dereference というエラーになってしまうのですが、どうすればいいでしょうか?

go

1package main 2 3import ( 4 "fmt" 5 "github.com/dgrijalva/jwt-go" 6 "io/ioutil" 7 "strings" 8) 9 10//var secretKey string = "-----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----" 11 12func main() { 13 //var tokenString = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjM5MjQ1NzksInVzZXJfaWQiOjJ9.8QdgU83ewNTqH56PAGKU0e0QHvZ43GChP1WOcfpK_09s0GsKOfyv3ACg2AJ2fCZZBdZ2A5annGEt8_l1GfDt1kpMNUhhchqwkYWDjC6uJn2UI94PjhY6w6qIoureZokI-FCOMfEfhSWbN1B79XfQ6CwDdmO54g8E9usMA0RNj0S6LgcvhJvzhOmrPyrx7WnIMlnTQbkk6L2KtQBAOiMsYkAoJ5kxNoSPJTSxn2nYQ3wWdEYtWOvVH0-wOOELSfXDo3GxwpPOlQdxyqkd_ADDOderhm6C_n2suuFruMUzVsWjB9VHHeXae1avyWxsB-Js1n6osGSZbP16j1OBMstKFRqvAbbIIY85nGP1fiDXaETkzpoOMvkrvQmjSTMjOzPVaD4gZ2Kc1Vagtydb7hTglHz3RNKWcdl7_6YzqkzJ3G9jdYYhlMJmB0uH_VXuqJhihjaELXhWEIcJOFT2M3Cisz5UjE0zq0sOKeX9XLRwfJQG74SQ15PHirbvNdvFV0X7MUrcilknxPB2htKzjT9fvg1urtrIj0Rinqh16LHPd6PBO5jA9UmQdlzcZc-Es_NBnVKVR4EHXLOPsy6TFxRr5SBpZUbEzFeHRQb4LqUE1YoC1qMXB278zvBBXlWClmwF71aheNKFm6s-E5yftAIv5JDeAJ-IXf78D4lUz_JH-SsExiting." 14 var tokenString = "teste.teste." 15 16 secretKey, _ := ioutil.ReadFile("private.key") 17 fmt.Printf("key: %v \n", secretKey) 18 19 parsedKey, err := jwt.ParseRSAPublicKeyFromPEM([]byte(secretKey)) 20 if err != nil { 21 fmt.Errorf("erro %v \n", err) 22 } 23 fmt.Printf("parsedKey: %v \n", parsedKey) 24 25 parts := strings.Split(tokenString, ".") 26 fmt.Printf("tokenString: %v \n", parts[2]) 27 28 err = jwt.SigningMethodRS256.Verify(strings.Join(parts[0:2], "."), parts[2], parsedKey) 29 if err != nil { 30 fmt.Errorf("[Error while verifying key: %v", err) 31 } 32} 33

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/09/22 10:45

parsedKey, err := jwt.ParseRSAPublicKeyFromPEM([]byte(secretKey) とされていますが、secretKey は private key です。
tuioku

2022/09/22 11:51

ありがとうございます。 下記の生成のやり方でやってみたら今度は parsedKey の 値が nil になっていまうのですがご存じでしょうか? go 1.18.4 openssl genrsa 4096 > private.key openssl rsa -pubout < private.key > public.key
guest

回答1

0

まず、最初の質問の状態であれば、parsedKeyと一緒に返るerrがnilではありませんでした。
この場合、parsedKeyはnilになります。nilを後続処理に渡してしまえば質問通りのpanicになります。

で、どう修正すべきかを列挙します。

  • ReadFileはosパッケージにあるものを使いましょう。ioutilは非推奨です。
  • ReadFileが返すのは[]byte型です。それをあらためて[]byteにキャストする意味はありません。
  • fmt.Errorfはエラーオブジェクトを作る機能で画面に出力されません。log.Fatalfなどを使いましょう。
  • また、エラー処理の後処理を継続するのはよくありません。上記log.Fatal系ならプロセスを終了するので継続されません。
  • コメントにあった通りPrivateキーのPEMファイルをParseRSAPublicKeyFromPEMで読んでもエラーになります。読ませたい内容とパースする関数の組み合わせを合わせましょう。

投稿2022/09/22 12:47

編集2022/09/22 12:50
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuioku

2022/09/26 01:07

ありがとうございます。 おそらく go のバージョンが変わっていて、 pem の key じゃないとライブラリがエラーを返す様になっていたんだと思われます。 一通り、pem の鍵を読ませるようにしたら解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問