質問: #{improved_valid_jwt_signature?(SAFETYNET_JWT)}" ``` ### 補足情報(言語/FW/ツール等のバージョンなど) XAMPP ver7.0.8 Apache1.2.4.18(win32) PHP7.0.8
回答: JWS ヘッダの `x5c` チェインに含まれる各証明書は、 DER (バイナリ) 形式の証明書を Base64 でエンコードしただけのもの かと思います。一方、 PHP の `openssl_*` 関数は 以前より PEM (テキスト) 形式しかサポートしておらず 、恐らく現在もそうなのだと思います。 というわけで、 `openssl_x509_read()` で開きたければ PEM 形式にきちんと直してやれば良いのですが、 PEM は殆ど **DER の Base64 表現にヘッダ・フッタを付けただけのもの** ですから、前掲の User Contributed Notes で示されているように、単純に以下ようなコードで変換してやれば良いのではないでしょうか。 ``` $pemCert = ( "-----BEGIN CERTIFICATE-----\n" . chunk_split($decodedHeader->x5c[0], 64, "\n") . "-----END CERTIFICATE-----\n" ); $cert = openssl_x509_read($pemCert); ``` ちなみに、 JWT の基本的な処理は php-jwt というライブラリがありますので、参考にしたり、使ってみたりすると良いかもしれません。