PHP 中 firebase/php-jwt RS256 公私鑰生成指南

踩了一晚上坑,終於爬出來了,哈…哈哈哈…咳咳
所有關於 openssl_sign(): supplied key param cannot be coerced into a private/public key、Algorithm not allowed 等錯誤
按照文章來一遍,基本就能解決了

GitHub 用多了,第一反應用 puttygen.exe 這個程序來生成,得到 id_rsaid_rsa.pub

然而,這貨並沒有什麼卵用…

當然,我們生成一個 Private Key 後,通過如圖導出一份私鑰後還是能用的

導出 OpenSSH Key

但是…Public Key 就沒法用了,因爲這玩意兒吧,要講究格式…後來才發現除了 OpenSSH,還有一個 OpenSSL

所以,我們應當使用 OpenSSL 來生成…

工具去哪兒找?https://git-scm.com/downloads,下一個 Git 安裝上就行了

便攜版需要手動配置一下環境變量,除了 \PortableGit\bin 這個要添加到 Path\PortableGit\usr\bin 這個也需要

其實很簡單了,以 Windows 舉例,桌面按下 Shift + 鼠標右鍵打開 cmd(命令窗口,Win 10 爲 PowerShell)

# 2048 這個長度可根據實際情況調整
openssl genrsa -out pri_key.pem 2048

完成後桌面就會出現 pri_key.pem 文件,擼開看看,開頭和結尾一定是

-----BEGIN RSA PRIVATE KEY-----
...省略...
-----END RSA PRIVATE KEY-----

這玩意兒在 firebase/php-jwt 中就能直接用了,參考:php-jwt/README-CHS.md at master · maxsky/php-jwt【我在官方的基礎上做了一點小翻譯】
原文在這兒:firebase/php-jwt: PEAR package for JWT

接着再輸入一句命令拿到公鑰就能玩兒了:

openssl rsa -in pri_key.pem -pubout -out pub_key.pem

同樣的,在桌面會再多出一個 pub_key.pem 文件,開頭結尾一定是:

-----BEGIN PUBLIC KEY-----
...省略...
-----END PUBLIC KEY-----

網上說的什麼 J8 香蕉船生成 PKCS#8 編碼公鑰完全不需要好嗎。。。

就是這句命令:【無需執行】

openssl pkcs8 -topk8 -inform PEM -in pri_key.pem -outform PEM -out pkcs8_pri_key.pem –nocrypt

因爲生成後,格式是這樣的:

-----BEGIN ENCRYPTED PRIVATE KEY-----
...省略...
-----END ENCRYPTED PRIVATE KEY-----

加密的私鑰?用在什麼地方我不知道,我只知道這個放到 JWT 裏面用不了就對了

最後使用,參照上方已翻譯的鏈接擼碼就行:(注意格式和下方一致,那份 README-CHS.md 裏很詳細了)

private $privateKey = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
// 中間內容自行填寫
-----END RSA PRIVATE KEY-----
EOD;

private $publicKey = <<<EOD
-----BEGIN PUBLIC KEY-----
// 中間內容自行填寫
-----END PUBLIC KEY-----
EOD;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章