python - 使用 Python 从 Azure Key Vault 解码 JsonWebKey

标签 python azure key rsa azure-keyvault

我有一个 python 脚本,可以从 Azure Key Vault 检索 RSA 私钥。尝试序列化键值会给出:

ValueError: Could not deserialize key data.

key_bytes 看起来像“b'\xb8w\xb7\xce{s\xf7\xa0\xce\xba\xf5#\x07\x8b?\x1d\xc9m...”

代码:

from azure.keyvault import KeyVaultClient, KeyVaultAuthentication
from azure.common.credentials import ServicePrincipalCredentials
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.asymmetric import dsa
from cryptography.hazmat.primitives import serialization

subscription_id = "xxx"
VAULT_URL = "xxx"
KEY_ID = "xxx"
KEY_VERSION = "xxx"

credentials = ServicePrincipalCredentials(
    client_id = 'xxx',
    secret = 'xxx',
    tenant = 'xxx'
)

client = KeyVaultClient(credentials)

key_bundle = client.get_key(VAULT_URL,
                            KEY_ID,
                            KEY_VERSION)

key_bytes = key_bundle.key.n

p_key = serialization.load_pem_private_key(
    key_bytes,
    password='xxx',
    backend=default_backend()
    )

通过从 Blob 存储中以 .p8 格式加载 key ,上述 key 序列化可以发挥作用。 Key Vault 要求 key 以 pem 格式保存。

我尝试了不同的解码等,但在解码字节方面没有成功。任何解决此问题的帮助或提示将不胜感激。

最佳答案

注意我正在使用 jwcrypto。

不确定这是否相关,但过去几天我一直在与 JWK 作斗争。对我有帮助的一件事是 Base64 编码和解码 e 和 n( key 的指数和模数): base64.urlsafe_b64encode(n).decode()它的作用是获取 ASCII 编码的(我相信)字节 n 值 (b'...') 并返回 base64 编码的字节,然后解码为字符串,因为这就是我的输入所需的内容。

  • 初始 n 值:b'\xd4b\xd3/"Vi\x8b\xce\xaf...\xf1\xec\xcd
  • base64 编码:b'1GLTLyJWaYvOrwdje1O3...OvHszQ==
  • 解码:'1GLTLyJWaYvOrwdje1O3...OvHszQ== (请注意末尾的“==”,这是您希望在私钥末尾看到的内容)

同样,不确定这是否有帮助。

This给出了一些参数的上下文以及我对 this 的理解文章中,您实际上无法从 Key Vault 中获取私钥,而只能获取公钥。

关于python - 使用 Python 从 Azure Key Vault 解码 JsonWebKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54868524/

相关文章:

C++ 写注册表

python - Django 和基于位置的应用程序

python - 是否可以为类实例范围创建 pytest 固定装置?

azure - 从 dockerfile 构建 Azure 机器学习环境(tensorflow)失败

azure - 需要为 Azure 表构建复杂的查询来计算行数

c# - Entity Framework Code First 一对一关系

python - 使用 Pandas 循环读取CSV文件,然后连接它们

python - 为什么在运行我的 python 脚本时 powershell 会卡住一点

Azure 'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册

Python:如何附加到字典的现有键?