์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์„ฑํ™” ํ•ด์ฃผ์„ธ์š”

p080 JWT ๋งŒ๋“œ๋Š” Powershell

 ·  โ˜• 5 min read

์˜ค๋Š˜ ํ•  ๋‚ด์šฉ์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

p080_powershell_jwt.png

JWT๊ฐ€ ๊ฐ‘์ž๊ธฐ ์™œ ๋‚˜์™€์š”?

  • ๋„ต, Line SDK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ค‘ 30์ผ ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” access token์„ ์–ป๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.
    • ์ด๊ฑด ํŠน๋ณ„ํ•œ ์ƒํ™ฉ์˜ ๋Œ€๋‹ต์ด๊ตฌ์š”.
  • ๋‚˜๋Š” ๋ˆ„๊ตฌ์ธ์ง€(Authentication) ํ™•์ธ์„, Persistent Storage๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ค‘,
  • ์‹œ์Šคํ…œ์— ๋“ฑ๋ก๋œ CRT๋ฅผ ์ด์šฉํ•ด Signํ•˜๊ณ , Expiry๋ฅผ ํฌํ•จํ•œ ์ „๋‹ฌ๋‚ด์šฉ(Payload)์˜ ํฌ๋งท์ด ์œ ์—ฐํ•œ
  • API ์ธ์ฆ ๋งค์ปค๋‹ˆ์ฆ˜(API authentication mechanism) ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ, JWT๊ฐ€ ๋ญ”๊ฐ€์š”?

jwt๋Š” bearer token์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๋‚ด์šฉ์„ ๊ฐ€์ง€๋Š” ๋ฌธ์ž์—ด์ด์—์š”

  • bear๋Š” ๊ณฐ, ์•„์ด๋ฅผ ๋‚ณ๋‹ค, ์ฐธ๋‹ค ์ด์™ธ์—๋„ ๊ฐ€์ง€๋‹ค, ๋ฐ›์น˜๋‹ค ๋ผ๋Š” ๋œป๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๊ธฐ์„œ๋Š” ๋ญ”๊ฐ€๋ฅผ ๋“ค๊ณ ์žˆ๋Š” ๊ฒƒ, ๋ญ”๊ฐ€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋ž€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌผ๊ฑด์„ ์ง์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ์˜์–ด๋กœ๋Š” payload๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทผ๋ฐ json ์ŠคํŠธ๋ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— jason web token์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • ์ฆ‰, bearer token์ด๋ผ๊ณ  ํ•˜๋ฉด, ์ด ํ† ํฐ์„ ํ•ด์„ํ•ด๋ณด๋ฉด, ์ธ์ฆ์— ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค.. ๋ผ๊ณ  ํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  • ํŠน์ดํ•œ ๊ฒƒ์€ symmetric encryption์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋„ค. publick key, private key. ๊ทธ๊ฒ๋‹ˆ๋‹ค.
  • ์„œ๋ช…ํ•˜๋ฉด, ์›๋ณธ ๋ฌธ์ž์—ด๊ณผ hashํ‚ค๊ฐ€ ์ƒ์„ฑ๋˜์ฃ ? ์ด ๋‘๊ฐœ๋ฅผ ๋ฌถ์–ด base64์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

์„œ๋ช…์— ๋Œ€ํ•œ wikipedia ์ด๋ฏธ์ง€๋ฅผ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

p080_private_key_signing.png

์ธ์ฆ์„œ ๋ณต์Šตํ•˜๊ธฐ

์ธ์ฆ์„œ๋ฅผ ๊ฐ€๋”์“ฐ์‹œ๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด, ์ž์ฃผ ์žŠ๋Š” ๊ฒƒ ๋ถ€ํ„ฐ ๋ณต์Šตํ•˜๊ณ  ๊ฐ€๋ฉด,
์šฐ์„  GMU openssl์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด store์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
GMU openssl๊ณผ ์œˆ๋„์šฐ์ฆˆ์˜ ๋ช…๋ น์–ด๋Š” ๊ฐ๊ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์šฐ์„  GMU openssl์€

  • key ๋งŒ๋“ค๊ณ 
  • Subject๋„ฃ์–ด์„œ src๋งŒ๋“ค๊ณ 
  • ์ธ์ฆ์„œ์ธ crt๋กœ ๋งŒ๋“ค์–ด์„œ store์— ์ €์žฅ

๋ฐ˜๋ฉด ์œˆ๋„์šฐ์ฆˆ๋Š”

  • ํ•œ ๋ฐฉ์— crt๋งŒ๋“ค์–ด์„œ store์— ์ €์žฅํ•˜๊ณ 
  • key๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๊ฑฐ๊พธ๋กœ crt์•ˆ์—์„œ ๊บผ๋‚ด์–ด ์“ด๋‹ค

symmetric ํ‚ค๋Š” ๋ณด๊ด€ ๋ฐฉ๋ฒ•์ด ๋ช‡๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ,

  • ์šฐ์„  ์ธ์ฆ์„œ๋Š” private key, public key ๋‘˜ ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•”ํ˜ธํ™” ํฌ๋งท์ธ PKCS ํฌ๋งท์ค‘์— private key, public key๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํฌ๋งท๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    • 12๋ฒˆ ํฌ๋งท์ž…๋‹ˆ๋‹ค. ํ™•์žฅ์ž๋Š” ์ฃผ๋กœ .pfx๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ssh-keygen ์ปค๋งจ๋“œ๋‚˜ openssl ์ปค๋งจ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ํŒŒ์ผ๋กœ ๊ฐ๊ฐ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    • linux ์‰˜ ์„ค์ •ํ•˜๋‹ค๋ณด๋ฉด ๋กœ๊ทธ์ธ์„ ์ƒ๋žตํ•˜๊ธฐ ์œ„ํ•ด ssh-keygen ์„ ์ข…์ข… ์‚ฌ์šฉํ•˜์ฃ ?
    • ํ™•์žฅ์ž๋Š” public key๋Š” .pub, private key๋Š” .key๋ฅผ ์ฃผ๋กœ ์”๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธ์ฆ์„œ๋Š”?

์•Œ์•„๋ณด๋Š” ๋ช…๋ น์–ด๋Š” dir cert:\CurrentUser\My ์ž…๋‹ˆ๋‹ค.

PS C:\Users\usr0100023\blog> dir cert:\CurrentUser\My


   PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
AA3F29ACAB1A7F03B1A4F7A5599CAB88046190EF  CN=5b80296b-f36a-47b1-bc60-1682acc7fb79
A942CDF8EBB3253F114A232D14F0164E13F7F28D  CN=usr0100023, OU=User, OU=GMO Internet, DC=GMO, DC=LOCAL

๋‘๊ฐœ๊ฐ€ ์žˆ๋„ค์š”. ๋ญ์ง€?

์ฒซ๋ฒˆ์งธ๋Š”

PS C:\Users\usr0100023\blog> (dir cert:\CurrentUser\My)[0] | fl *


PSPath                   : Microsoft.PowerShell.Security\Certificate::CurrentUser\My\AA3F29ACAB1A7F03B1A4
                           F7A5599CAB88046190EF
PSParentPath             : Microsoft.PowerShell.Security\Certificate::CurrentUser\My
PSChildName              : AA3F29ACAB1A7F03B1A4F7A5599CAB88046190EF
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.Security\Certificate
PSIsContainer            : False
EnhancedKeyUsageList     : {ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆ่ช่จผ (1.3.6.1.5.5.7.3.2)}
DnsNameList              : {5b80296b-f36a-47b1-bc60-1682acc7fb79}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 :
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Se
                           curity.Cryptography.Oid, System.Security.Cryptography.Oid...}
FriendlyName             :
IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : 2030/11/18 21:39:51
NotBefore                : 2020/11/18 21:09:51
HasPrivateKey            : True
PrivateKey               :
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
RawData                  : {48, 130, 3, 242...}
SerialNumber             : 71383B952949ED8A46E1F5E62B4C14F8
SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm       : System.Security.Cryptography.Oid
Thumbprint               : AA3F29ACAB1A7F03B1A4F7A5599CAB88046190EF
Version                  : 3
Handle                   : 1664150703360
Issuer                   : DC=net + DC=windows + CN=MS-Organization-Access + OU=82dbaca4-3e81-46ca-9c73-0
                           950c1eaca97
Subject                  : CN=5b80296b-f36a-47b1-bc60-1682acc7fb79

์ž‘๋…„ 11์›”์— ๋งŒ๋“ ๊ฑด๋ฐ 2๋…„์งœ๋ฆฌ์ด๊ณ ,… Sharepoint์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ๊ฑด๊ฐ€์š”?? PrivateKey๊ฐ€ ์—†์–ด์š”.

๋‘๋ฒˆ์งธ๋Š”?

PS C:\Users\usr0100023\blog> (dir cert:\CurrentUser\My)[1] | fl *


PSPath                   : Microsoft.PowerShell.Security\Certificate::CurrentUser\My\A942CDF8EBB3253F114A
                           232D14F0164E13F7F28D
PSParentPath             : Microsoft.PowerShell.Security\Certificate::CurrentUser\My
PSChildName              : A942CDF8EBB3253F114A232D14F0164E13F7F28D
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.Security\Certificate
PSIsContainer            : False
EnhancedKeyUsageList     : {ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆ่ช่จผ (1.3.6.1.5.5.7.3.2), ้›ปๅญใƒกใƒผใƒซใฎไฟ่ญท (1.3.6.1.5.5.7.3.4),
                           ๆš—ๅทๅŒ–ใƒ•ใ‚กใ‚คใƒซ ใ‚ทใ‚นใƒ†ใƒ  (1.3.6.1.4.1.311.10.3.4)}
DnsNameList              : {usr0100023}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 : {2CB84403-A3E8-4CEE-989D-EB2DA05F8586}
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Se
                           curity.Cryptography.Oid, System.Security.Cryptography.Oid...}
FriendlyName             :
IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : 2022/11/10 13:31:33
NotBefore                : 2020/11/10 13:21:33
HasPrivateKey            : True
PrivateKey               : System.Security.Cryptography.RSACryptoServiceProvider
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
RawData                  : {48, 130, 7, 197...}
SerialNumber             : 13000022798A2F44AE4D65CAC9000000002279
SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm       : System.Security.Cryptography.Oid
Thumbprint               : A942CDF8EBB3253F114A232D14F0164E13F7F28D
Version                  : 3
Handle                   : 1664152461536
Issuer                   : CN=GMOEPCA01-CA, DC=GMO, DC=LOCAL
Subject                  : CN=usr0100023, OU=User, OU=GMO Internet, DC=GMO, DC=LOCAL

์ด๊ฑด PrivateKey๊ฐ€ ์žˆ๋„ค์š”. ์ด๊ฑธ๋กœ JWT๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

JWT ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
PS C:\Users\usr0100023\blog> install-module jwt

ไฟก้ ผใ•ใ‚Œใฆใ„ใชใ„ใƒชใƒใ‚ธใƒˆใƒช
ไฟก้ ผใ•ใ‚Œใฆใ„ใชใ„ใƒชใƒใ‚ธใƒˆใƒชใ‹ใ‚‰ใƒขใ‚ธใƒฅใƒผใƒซใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใ‚ˆใ†ใจใ—ใฆใ„ใพใ™ใ€‚ใ“ใฎใƒชใƒใ‚ธใƒˆใƒชใ‚’ไฟก้ ผใ™ใ‚‹ๅ ดๅˆใฏ
ใ€Set-PSRepository ใ‚ณใƒžใƒณใƒ‰ใƒฌใƒƒใƒˆใ‚’ๅฎŸ่กŒใ—ใฆใ€ใƒชใƒใ‚ธใƒˆใƒชใฎ InstallationPolicy
ใฎๅ€คใ‚’ๅค‰ๆ›ดใ—ใฆใใ ใ•ใ„ใ€‚'PSGallery' ใ‹ใ‚‰ใƒขใ‚ธใƒฅใƒผใƒซใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใพใ™ใ‹?
[Y] ใฏใ„(Y)  [A] ใ™ในใฆ็ถš่กŒ(A)  [N] ใ„ใ„ใˆ(N)  [L] ใ™ในใฆ็„ก่ฆ–(L)  [S] ไธญๆ–ญ(S)  [?] ใƒ˜ใƒซใƒ—
(ๆ—ขๅฎšๅ€คใฏ "N"):Y
PS C:\Users\usr0100023\blog> gcm -module jwt

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Verify-JwtSignature                                1.9.0      jwt
Function        ConvertFrom-Base64UrlString                        1.9.0      jwt
Function        ConvertTo-Base64UrlString                          1.9.0      jwt
Function        Get-JwtHeader                                      1.9.0      jwt
Function        Get-JwtPayload                                     1.9.0      jwt
Function        New-Jwt                                            1.9.0      jwt
Function        Test-Jwt                                           1.9.0      jwt


PS C:\Users\usr0100023\blog> 

ํ•ด๋ณผ๊นŒ์š”?

PrivateKey์—†๋Š” Crt๋กœ ์„œ๋ช…ํ•˜๋ ค๋“ค๋ฉด ์—๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. ์„œ๋ช…์ด๋ž€ PrivateKey๋กœ Hash๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๊ฑฐ๋“ ์š”

  • $cert = (dir cert:\CurrentUser\My)[0]
  • New-Jwt -Cert $cert -PayloadJson ‘{“token1”:“value1”,“token2”:“value2”}’
PS C:\Users\usr0100023\blog> $cert = (dir cert:\CurrentUser\My)[0]
PS C:\Users\usr0100023\blog> New-Jwt -Cert $cert -PayloadJson '{"token1":"value1","token2":"value2"}' -verbose
่ฉณ็ดฐ: Payload to sign: {"token1":"value1","token2":"value2"}
่ฉณ็ดฐ: Algorithm: RS256
่ฉณ็ดฐ: Signing certificate: CN=5b80296b-f36a-47b1-bc60-1682acc7fb79
There's no private key in the supplied certificate - cannot sign
็™บ็”Ÿๅ ดๆ‰€ C:\Program Files\WindowsPowerShell\Modules\jwt\1.9.0\JWT.psm1:277 ๆ–‡ๅญ—:17
+ ...             throw "There's no private key in the supplied certificate ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (There's no priv...e - cannot sign:String) [], RuntimeEx 
   ception
    + FullyQualifiedErrorId : There's no private key in the supplied certificate - cannot sign

๊ทธ๋Ÿผ PrivateKey์žˆ๋Š” Crt๋กœ ๋งŒ๋“ค๋ฉด?

  • $cert = (dir cert:\CurrentUser\My)[1]
  • New-Jwt -Cert $cert -PayloadJson ‘{“token1”:“value1”,“token2”:“value2”}’ -verbose
PS C:\Users\usr0100023\blog> $cert = (dir cert:\CurrentUser\My)[1]
PS C:\Users\usr0100023\blog> New-Jwt -Cert $cert -PayloadJson '{"token1":"value1","token2":"value2"}' -verbose
่ฉณ็ดฐ: Payload to sign: {"token1":"value1","token2":"value2"}
่ฉณ็ดฐ: Algorithm: RS256
่ฉณ็ดฐ: Signing certificate: CN=usr0100023, OU=User, OU=GMO Internet, DC=GMO, DC=LOCAL
Signing with SHA256 and Pkcs1 padding failed using private key System.Security.Cryptography.RSACryptoServ
iceProvider
็™บ็”Ÿๅ ดๆ‰€ C:\Program Files\WindowsPowerShell\Modules\jwt\1.9.0\JWT.psm1:282 ๆ–‡ๅญ—:25
+ ...     catch { throw "Signing with SHA256 and Pkcs1 padding failed using ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Signing with SH...ServiceProvider:String) [], RuntimeEx 
   ception
    + FullyQualifiedErrorId : Signing with SHA256 and Pkcs1 padding failed using private key System.Secu 
   rity.Cryptography.RSACryptoServiceProvider
 
PS C:\Users\usr0100023\blog>

์‹คํŒจํ•˜๋„ค์š”. ์™œ ์•ˆ๋˜์ง€? ์„œ๋ช…์šฉ์ด ์•„๋‹ˆ์–ด์„œ ๊ทธ๋Ÿฐ๊ฐ€?

์„œ๋ช…์šฉ์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ํ•ด๋ณผ๊นŒ์š”?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
PS C:\Users\usr0100023\blog> New-SelfSignedCertificate -CertStoreLocation cert:\currentuser\my `
>> -Subject "CN=Local Code Signing" `
>> -KeyAlgorithm RSA `
>> -KeyLength 2048 `
>> -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
>> -KeyExportPolicy Exportable `
>> -KeyUsage DigitalSignature `
>> -Type CodeSigningCert


   PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\my

Thumbprint                                Subject
----------                                -------
9F9E54C1E3F7E8F4025E9D6FBDF4F2FEC065AD7D  CN=Local Code Signing


PS C:\Users\usr0100023\blog>
PS C:\Users\usr0100023\blog> $cert = (dir cert:\CurrentUser\My)[2]
PS C:\Users\usr0100023\blog> $cert


   PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
9F9E54C1E3F7E8F4025E9D6FBDF4F2FEC065AD7D  CN=Local Code Signing


PS C:\Users\usr0100023\blog> $cert | fl *


PSPath                   : Microsoft.PowerShell.Security\Certificate::CurrentUser\My\9F9E54C1E3F7E8F4025E
                           9D6FBDF4F2FEC065AD7D
PSParentPath             : Microsoft.PowerShell.Security\Certificate::CurrentUser\My
PSChildName              : 9F9E54C1E3F7E8F4025E9D6FBDF4F2FEC065AD7D
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.Security\Certificate
PSIsContainer            : False
EnhancedKeyUsageList     : {ใ‚ณใƒผใƒ‰็ฝฒๅ (1.3.6.1.5.5.7.3.3)}
DnsNameList              : {Local Code Signing}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 :
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Se
                           curity.Cryptography.Oid}
FriendlyName             :
IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : 2022/03/01 23:43:14
NotBefore                : 2021/03/01 23:23:14
HasPrivateKey            : True
PrivateKey               : System.Security.Cryptography.RSACryptoServiceProvider
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
RawData                  : {48, 130, 3, 10...}
SerialNumber             : 77A29ED5202143864D262A071647AA9F
SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm       : System.Security.Cryptography.Oid
Thumbprint               : 9F9E54C1E3F7E8F4025E9D6FBDF4F2FEC065AD7D
Version                  : 3
Handle                   : 1664143480000
Issuer                   : CN=Local Code Signing
Subject                  : CN=Local Code Signing



PS C:\Users\usr0100023\blog> New-Jwt -Cert $cert -PayloadJson '{"token1":"value1","token2":"value2"}' -verbose
่ฉณ็ดฐ: Payload to sign: {"token1":"value1","token2":"value2"}
่ฉณ็ดฐ: Algorithm: RS256
่ฉณ็ดฐ: Signing certificate: CN=Local Code Signing
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbjEiOiJ2YWx1ZTEiLCJ0b2tlbjIiOiJ2YWx1ZTIifQ.Bhy6UuowRaC3-KJ4XqtnnTuLxMi4VdygRomQf4T3vy1r5ILNJhnTI14L5DoWIlYihQBFxn0hMU1UHY_xMEpQ90qCA63nn3lL8UHRGQ32_U9zFH_GHuRLHmd6VuyN-ozwe8BRCmyDnFsotki8HJxCdsc-0nYJKYrwCGj5j77sEZMftsiXz6Og_M09ECcoN3dHoaI3mQ91rNIOLX42urFhfIXYGx2qKxcMgElgSlO7zvGi_gNewBJkvNK2Poozj4BNkcVHMd5R1a4EaO9SdS_HBxrGzRWpx6k69m9Tmt1nCVvkJFrSKeEGmZQki1CE4MmkMCOTGfC_wRZmx_YCkv_WOA

๋„ต ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

p080_powershell_jwt.png

  • Private Key, Public Key ๋‘˜ ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํฌ๋งท์ด ์œ ๋ช…ํ•œ ๊ฒƒ์ด ํ•˜๋‚˜ ์žˆ์ฃ ? PKCS 12๋ฒˆ ํฌ๋งท (.pfx ํŒŒ์ผํ™•์žฅ์ž)
  • openssl๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋Š” ์ง€๋„ ๋‹ค์Œ์— ๋‹ค๋ฃจ์–ด ๋ณด๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

Ref

๊ณต์œ ํ•˜๊ธฐ

tkim
๊ธ€์“ด์ด
tkim
Software Engineer