我如何从 .jks 文件中获取 pem?
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 是密钥类型(例如“私钥”或“证书”)。
样本来自 https://pyjks.readthedocs.io/en/latest/examples.html:
Reading a JKS or JCEKS keystore and dumping out its contents in the
PEM format:
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)
所以在你的情况下,稍微修改为 return 一个文本块,而不是打印它:
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")
我正在尝试使用 .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 是密钥类型(例如“私钥”或“证书”)。
样本来自 https://pyjks.readthedocs.io/en/latest/examples.html:
Reading a JKS or JCEKS keystore and dumping out its contents in the PEM format:
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)
所以在你的情况下,稍微修改为 return 一个文本块,而不是打印它:
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")