0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

php-jwtで使用する秘密鍵・公開鍵の作成

Last updated at Posted at 2020-09-16

目的

  • php-jwt で使用できる鍵ペアの作成
  • php-jwt で公開鍵認証

環境

秘密鍵の作成、公開鍵の作成

$ openssl genrsa -out id_rsa_jwt.pem 2048
$ openssl rsa -in id_rsa_jwt.pem -pubout > id_rsa_jwt.pub

openssl genrsa の説明(秘密鍵を作成する)

ワード 意味
openssl genrsa RSA秘密鍵を作成
-out {file} 出力ファイルの指定
2048 暗号鍵の大きさを2048ビットに指定

openssl rsa の説明(秘密鍵から公開鍵を作成する)

ワード 意味
openssl rsa RSAキー管理
-in {file} 入力ファイルの指定
-pubout 公開鍵を出力
> {file} リダイレクト

実際の使用例(暗号化と復号)

事前に composer require firebase/php-jwtphp-jwt をインストールしておくこと。

index.php
<?php

require_once('vendor/autoload.php');

use \Firebase\JWT\JWT;

$now = time();
$payload = [
    "iss" => "http://example.org",
    "aud" => "http://example.com",
    "iat" => $now, // issued at
    "nbf" => $now, // not before
    "exp" => ($now + (60 * 60 * 2)), // expire, 2時間
];

// 事前に作成した秘密鍵・公開鍵を読込
// テストなので同じ階層に鍵を置いているがもっとセキュアな場所に置くべき
$pte_key = file_get_contents('id_rsa_jwt.pem');
$pub_key = file_get_contents('id_rsa_jwt.pub');

// 暗号化
$jwt = JWT::encode($payload, $pte_key, 'RS256');
echo '<h1>encode pass!</h1>';

// 復号化
$decoded = JWT::decode($jwt, $pub_key, ['RS256']);
echo '<h1>decode pass!</h1>';

公開鍵を別のサーバーにコピーすれば、そのサーバーでも使用できるようになる想定。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?