踩了一晚上坑,終於爬出來了,哈…哈哈哈…咳咳
所有關於 openssl_sign(): supplied key param cannot be coerced into a private/public key、Algorithm not allowed 等錯誤
按照文章來一遍,基本就能解決了
GitHub 用多了,第一反應用 puttygen.exe
這個程序來生成,得到 id_rsa
和 id_rsa.pub
然而,這貨並沒有什麼卵用…
當然,我們生成一個 Private 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;