[linux] 설치한 phpseclib을 php코드에서 사용하는 법

프로그래밍/서버2020. 4. 24. 12:48

지난 포스팅에서 composer를 이용해.. 쉽게 원하는 프로그램을 설치했습니다.

jwk-to-pem를 설치하니.. 디펜던시에 따라 필요한 phpseclib도 자동으로 설치가 됐습니다.

 

그런데 이렇게 설치한 프로그램들을 php에서 사용해야 하는데.. 어떻게 해야할지 잘 모르겠더라구요.

 

그냥 php코드를 작성하여 테스트를 해보니..

자동으로 설치한 프로그램이 로드되진 않고 에러가 발생했습니다.

새로 설치한 프로그램들은.. 수많은 php파일로 이루어져 있을텐데.. 그걸 하다하다 require_once를 통해 로드하기도 좀 그렇고..해서 검색을 해봤습니다.

 

https://stackoverflow.com/a/35015933/7225691

위의 링크에 아주 좋은 답변이 있네요.

 

composer require phpseclib/phpseclib 명령어를 입력하면 위 사진처럼 됩니다.

 

composer require codercat/jwk-to-pem 도 입력했습니다.

그런데 지금보니.. 이 명령어가 설치 명령어네요? 설치할 때와 동일한 명령어입니다.

 

./composer.json 파일에 뭐가 쓰이나봐요.

 

그리곤 작업할 php파일에 아래의 코드를 추가하라고 합니다.

require_once 'vendor/autoload.php';

 

그런데 위 파일을 풀 경로는 

/home/bitnami/vendor/autoload.php 인 것 같습니다.

 

상대경로로 인한 문제를 제거하려면.. 그냥

require_once '/home/bitnami/vendor/autoload.php'

명령어를 사용해주세요~

 

<?php
require_once '/home/bitnami/vendor/autoload.php';

use CoderCat\JWKToPEM\JWKConverter;

$jwkConverter = new JWKConverter();

// !!!! RSA key type is currently only supported.
$jwk = [
    "kty" => "RSA",
    "kid" => "zhA-H1DWOSgWQAIW7mewCYeaZLGpkgW_hXfq8jmV99I",
    "use" => "sig",
    "alg" => "RS256",
    "e" => "AQAB",
    "n" => "vdv73smpkrTIBSM8ka-pVXbNi7zYalm0R6WFBH4X8PQj8C7VfdckGsA6bTBseOVCTbu187_63yU2U7vqYiqwSLmkrBVAJjYMJY_XXfncxwqDWR_aa7eIJSKh22H_6yz6kFyF1h_ZSk68CPAEQpvd9VFAr4VLEwD32Ag6MwymSOxmFWJyddEtttdGcXLSrHcya3RWyG5KAW3Ti-HgNC-xo_C5LgEsUgjeUq-rc8NBXZrNCY-LJ_R-qtB_-5NkwlMJ_fUMBDcmZuciNOH71q7xyn0FGmGjrJXnyVJwyDiTrKRO36piMuiaJE2nIRJaLvhDN5M1K2VhSKPuaqUPyxLzBw"
];

$PEM = $jwkConverter->toPEM($jwk);
echo $PEM;

 

 

드디어.. https://github.com/acodercat/php-jwk-to-pem에 나와있는 테스트 코드 실행이 가능합니다. ㅜㅜ

 

위 사진은 JWK(RSA)를 PEM(public key)로 변환한 모습입니다.

 

애플 아이디로 로그인하기의.. 첫 걸음을 뗐군요..

 

https://appleid.apple.com/auth/keys

{ "keys": [ { "kty": "RSA", "kid": "86D88Kf", "use": "sig", "alg": "RS256", "n": "iGaLqP6y-SJCCBq5Hv6pGDbG_SQ11MNjH7rWHcCFYz4hGwHC4lcSurTlV8u3avoVNM8jXevG1Iu1SY11qInqUvjJur--hghr1b56OPJu6H1iKulSxGjEIyDP6c5BdE1uwprYyr4IO9th8fOwCPygjLFrh44XEGbDIFeImwvBAGOhmMB2AD1n1KviyNsH0bEB7phQtiLk-ILjv1bORSRl8AK677-1T8isGfHKXGZ_ZGtStDe7Lu0Ihp8zoUt59kx2o9uWpROkzF56ypresiIl4WprClRCjz8x6cPZXU2qNWhu71TQvUFwvIvbkE1oYaJMb0jcOTmBRZA2QuYw-zHLwQ", "e": "AQAB" }, { "kty": "RSA", "kid": "eXaunmL", "use": "sig", "alg": "RS256", "n": "4dGQ7bQK8LgILOdLsYzfZjkEAoQeVC_aqyc8GC6RX7dq_KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdDNq1n52TpxQwI2EqxSk7I9fKPKhRt4F8-2yETlYvye-2s6NeWJim0KBtOVrk0gWvEDgd6WOqJl_yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X-Tip84wqwyRpUlq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll-p_Dg8vAXxJLIJ4SNLcqgFeZe4OfHLgdzMvxXZJnPp_VgmkcpUdRotazKZumj6dBPcXI_XID4Z4Z3OM1KrZPJNdUhxw", "e": "AQAB" } ] }

 

JWKS을.. 한번 Public key로 변경해보려고 합니다. 일단은.. 위의 키를 php 배열로 하드코딩 합니다.

$jwkSet = [
  [
"kty" => "RSA",
"kid" => "86D88Kf",
"use" => "sig",
"alg" => "RS256",
"n" => "iGaLqP6y-SJCCBq5Hv6pGDbG_SQ11MNjH7rWHcCFYz4hGwHC4lcSurTlV8u3avoVNM8jXevG1Iu1SY11qInqUvjJur--hghr1b56OPJu6H1iKulSxGjEIyDP6c5BdE1uwprYyr4IO9th8fOwCPygjLFrh44XEGbDIFeImwvBAGOhmMB2AD1n1KviyNsH0bEB7phQtiLk-ILjv1bORSRl8AK677-1T8isGfHKXGZ_ZGtStDe7Lu0Ihp8zoUt59kx2o9uWpROkzF56ypresiIl4WprClRCjz8x6cPZXU2qNWhu71TQvUFwvIvbkE1oYaJMb0jcOTmBRZA2QuYw-zHLwQ",
"e" => "AQAB"
  ],
  [
"kty" => "RSA",
"kid" => "eXaunmL",
"use" => "sig",
"alg" => "RS256",
"n" => "4dGQ7bQK8LgILOdLsYzfZjkEAoQeVC_aqyc8GC6RX7dq_KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdDNq1n52TpxQwI2EqxSk7I9fKPKhRt4F8-2yETlYvye-2s6NeWJim0KBtOVrk0gWvEDgd6WOqJl_yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X-Tip84wqwyRpUlq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll-p_Dg8vAXxJLIJ4SNLcqgFeZe4OfHLgdzMvxXZJnPp_VgmkcpUdRotazKZumj6dBPcXI_XID4Z4Z3OM1KrZPJNdUhxw",
"e" => "AQAB"
  ]
];

그리곤

$PEMs = $jwkConverter->multipleToPem($jwkSet);

명령어를 사용하면 되는데

 

jwk-to-pem 0.3버전에서는 위 함수가 없어서 에러가 발생하더라고..

왜 그런가 깃헙을 보니(https://github.com/acodercat/php-jwk-to-pem/commit/21135797915920e4ff7b5b9c1aec7351981aa5be) 마스터 브랜치에만 이 코드가 있고.. 아직 태그가 안그어져서? 릴리즈 버전에는 없는 것 같아요..

 

그냥 수동으로 제 서버에 multipleToPem()함수를 추가했습니다.

 

<?php
require_once '/home/bitnami/vendor/autoload.php';

use CoderCat\JWKToPEM\JWKConverter;

$jwkConverter = new JWKConverter();

// !!!! RSA key type is currently only supported.

/*
$jwk = [
    "kty" => "RSA",
    "kid" => "zhA-H1DWOSgWQAIW7mewCYeaZLGpkgW_hXfq8jmV99I",
    "use" => "sig",
    "alg" => "RS256",
    "e" => "AQAB",
    "n" => "vdv73smpkrTIBSM8ka-pVXbNi7zYalm0R6WFBH4X8PQj8C7VfdckGsA6bTBseOVCTbu187_63yU2U7vqYiqwSLmkrBVAJjYMJY_XXfncxwqDWR_aa7eIJSKh22H_6yz6kFyF1h_ZSk68CPAEQpvd9VFAr4VLEwD32Ag6MwymSOxmFWJyddEtttdGcXLSrHcya3RWyG5KAW3Ti-HgNC-xo_C5LgEsUgjeUq-rc8NBXZrNCY-LJ_R-qtB_-5NkwlMJ_fUMBDcmZuciNOH71q7xyn0FGmGjrJXnyVJwyDiTrKRO36piMuiaJE2nIRJaLvhDN5M1K2VhSKPuaqUPyxLzBw"
];
$PEM = $jwkConverter->toPEM($jwk);
echo $PEM;
*/

//https://appleid.apple.com/auth/keys

// $PEMs now contains an array of PEMs
$jwkSet = [
  [
	"kty" => "RSA",
	"kid" => "86D88Kf",
	"use" => "sig",
	"alg" => "RS256",
	"n" => "iGaLqP6y-SJCCBq5Hv6pGDbG_SQ11MNjH7rWHcCFYz4hGwHC4lcSurTlV8u3avoVNM8jXevG1Iu1SY11qInqUvjJur--hghr1b56OPJu6H1iKulSxGjEIyDP6c5BdE1uwprYyr4IO9th8fOwCPygjLFrh44XEGbDIFeImwvBAGOhmMB2AD1n1KviyNsH0bEB7phQtiLk-ILjv1bORSRl8AK677-1T8isGfHKXGZ_ZGtStDe7Lu0Ihp8zoUt59kx2o9uWpROkzF56ypresiIl4WprClRCjz8x6cPZXU2qNWhu71TQvUFwvIvbkE1oYaJMb0jcOTmBRZA2QuYw-zHLwQ",
	"e" => "AQAB"
  ],
  [
	"kty" => "RSA",
	"kid" => "eXaunmL",
	"use" => "sig",
	"alg" => "RS256",
	"n" => "4dGQ7bQK8LgILOdLsYzfZjkEAoQeVC_aqyc8GC6RX7dq_KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdDNq1n52TpxQwI2EqxSk7I9fKPKhRt4F8-2yETlYvye-2s6NeWJim0KBtOVrk0gWvEDgd6WOqJl_yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X-Tip84wqwyRpUlq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll-p_Dg8vAXxJLIJ4SNLcqgFeZe4OfHLgdzMvxXZJnPp_VgmkcpUdRotazKZumj6dBPcXI_XID4Z4Z3OM1KrZPJNdUhxw",
	"e" => "AQAB"
  ]
];


$PEMs = $jwkConverter->multipleToPem($jwkSet);
//$PEMs = $jwkConverter->toPEM($jwk);
//echo $PEMs;
print_r($PEMs);

전체 코드는 위와 같습니다.

 

결과는 아래와 같습니다.

Array ( [0] => -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiGaLqP6y+SJCCBq5Hv6p GDbG/SQ11MNjH7rWHcCFYz4hGwHC4lcSurTlV8u3avoVNM8jXevG1Iu1SY11qInq UvjJur++hghr1b56OPJu6H1iKulSxGjEIyDP6c5BdE1uwprYyr4IO9th8fOwCPyg jLFrh44XEGbDIFeImwvBAGOhmMB2AD1n1KviyNsH0bEB7phQtiLk+ILjv1bORSRl 8AK677+1T8isGfHKXGZ/ZGtStDe7Lu0Ihp8zoUt59kx2o9uWpROkzF56ypresiIl 4WprClRCjz8x6cPZXU2qNWhu71TQvUFwvIvbkE1oYaJMb0jcOTmBRZA2QuYw+zHL wQIDAQAB -----END PUBLIC KEY----- [1] => -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4dGQ7bQK8LgILOdLsYzf ZjkEAoQeVC/aqyc8GC6RX7dq/KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdD Nq1n52TpxQwI2EqxSk7I9fKPKhRt4F8+2yETlYvye+2s6NeWJim0KBtOVrk0gWvE Dgd6WOqJl/yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X+Tip84wqwyRpU lq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll+p/Dg8vAXxJLIJ4SNLcqgFeZe 4OfHLgdzMvxXZJnPp/VgmkcpUdRotazKZumj6dBPcXI/XID4Z4Z3OM1KrZPJNdUh xwIDAQAB -----END PUBLIC KEY----- )

 

 

 

*jwk-to-perm 설치 경로

/home/bitnami/vendor/codercat/jwk-to-pem

 

*에러 로그 보기

cat /opt/bitnami/apache2/logs/error_log

작성자

Posted by 드리머즈

관련 글

댓글 영역