[英]How do I get the pem from .jks file?
我正在嘗試使用 .jks 文件來簽署 jwt 令牌。 我使用的庫是 pyjwt 和 pyjks。 以下是代碼片段:
userDto = user
payload = {
"iss": "test",
"exp": datetime.now(tz=timezone.utc) + timedelta(days=365),
"iat": datetime.now(tz=timezone.utc),
"nbf": datetime.now(tz=timezone.utc),
"sub": "testUser",
"auth": userDto
}
keystorePath = os.path.abspath("KeyStore.jks")
keystorePass = "test"
keyAlias = "test"
keystore = jks.KeyStore.load(keystorePath, keystorePass)
pk = keystore.private_keys[keyAlias]
encoded = jwt.encode(payload, pk, algorithm="RS512")
在執行最后一行代碼以使用 jks 簽名生成 jwt 時,它會拋出錯誤,提示需要 PEM 格式的密鑰。 我認為pk格式不是 jwk 所需要的。 我的問題是如何從.jks 中提取 pem 文件格式的文件來簽署 jwk 令牌? 謝謝。
“PEM”只不過是 base64 編碼的密鑰,包含在-----BEGIN XYZ-----
header 行和-----END XYZ-----
頁腳行中,其中 XYZ 是密鑰類型(例如“PRIVATE KEY”或“CERTIFICATE”)。
來自https://pyjks.readthedocs.io/en/latest/examples.html的示例:
讀取 JKS 或 JCEKS 密鑰庫並以 PEM 格式轉儲其內容:
import sys, base64, textwrap import jks def print_pem(der_bytes, type): print("-----BEGIN %s-----" % type) print("\r\n".join(textwrap.wrap(base64.b64encode(der_bytes).decode('ascii'), 64))) print("-----END %s-----" % type)
因此,在您的情況下,稍作修改以返回文本塊,而不是打印它:
import sys, base64, textwrap
import jks
def format_pem(der_bytes, type):
return "\r\n".join([
"-----BEGIN %s-----" % type,
"\r\n".join(textwrap.wrap(base64.b64encode(der_bytes).decode('ascii'), 64)),
"-----END %s-----" % type
])
# ...
pk = keystore.private_keys[keyAlias]
pk_pem = format_pem(pk, "PRIVATE KEY")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.