簡體   English   中英

如何從.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 是密鑰類型(例如“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM