openssl을 사용하여 JWT RS256 서명 생성

openssl을 사용하여 JWT RS256 서명 생성

.NET을 사용하여 RS256 알고리즘으로 JWT 토큰에 서명하려고 합니다 openssl. 다음 예시 토큰을 사용하세요.

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

RFC 7518, RS256은 사용된 서명이 "SHA-256을 사용하는 RSASSA-PKCS1-v1_5"임을 의미합니다. 내 이해는 다음과 같은 사용이 openssl dgst가능하다는 것입니다.

# generate the key
openssl genrsa -out private.pem 2048

# generate the signature
echo 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' | \
openssl dgst -sha256 -sign private.pem -binary | \
openssl base64 | \
tr -- '+/=' '-_ '

그러나 jwt.io를 사용하여 확인하려고 하면 잘못된 서명이 발생합니다. 또한, 동일한 개인 키를 사용하여 서명을 생성하기 위해 jwt.io를 사용하면 완전히 다른 서명이 생성됩니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까? openssl dgst이 토큰에 서명하는 올바른 방법 인가요 ?

답변1

echo인수를 줄로 표시합니다. 즉, 개행 문자를 추가한다는 뜻입니다. 일부 시스템이나 쉘에서는 -n이를 억제하지만printf '%s' 'string'확실히 정확하다.

# generate the key
openssl genrsa -out private.pem 2048

# generate the signature
printf '%s' 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' | \
openssl dgst -sha256 -sign private.pem -binary | \
openssl base64 | \
tr -- '+/=' '-_ '

관련 정보