You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Azure Key Vault中的PFX证书发送Python POST请求

解决从Azure Key Vault获取PFX证书并用于Requests请求的问题

问题分析

你将PFX证书上传至Azure Key Vault后,通过CertificateClient和SecretClient获取了证书对应的secret,但在转换证书格式用于Requests POST请求时遇到两个错误:

  1. 使用x509.load_der_x509_certificate解析时提示ASN1解析错误——因为从Key Vault获取的secret是PKCS12(PFX)格式的Base64编码,而非单独的DER格式证书。
  2. 使用crypto.load_pkcs12时提示PKCS12对象不可下标——因为Requests的cert参数不接受PKCS12对象,需要的是PEM格式的证书和私钥对。

正确解决方案

使用cryptography库解析PKCS12数据,提取证书和私钥并转换为PEM格式,直接传入Requests的cert参数:

完整代码示例

from azure.identity import DefaultAzureCredential
from azure.keyvault.certificates import CertificateClient
from azure.keyvault.secrets import SecretClient
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
import base64
import requests

# 1. 从Key Vault获取证书对应的secret
credential = DefaultAzureCredential()
vault_url = "https://something.vault.azure.net/"

certificate_client = CertificateClient(vault_url=vault_url, credential=credential)
certificate = certificate_client.get_certificate("aemocert")

secret_client = SecretClient(vault_url=vault_url, credential=credential)
secret = secret_client.get_secret(certificate.name)

# 2. 解析PKCS12数据,提取证书和私钥
pkcs12_data = base64.b64decode(secret.value)
# 如果PFX设置了密码,将password改为b"你的密码",否则传None
pkcs12 = serialization.pkcs12.load_pkcs12(
    pkcs12_data,
    password=None,
    backend=default_backend()
)

# 转换为PEM格式
cert_pem = pkcs12.certificate.public_bytes(encoding=serialization.Encoding.PEM)
private_key_pem = pkcs12.private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption()
)

# 3. 发送POST请求
url = "https://myurl"
headers = {"X-id": "dsd"}
data = {"test":"test"}

response = requests.request(
    "POST",
    url=url,
    headers=headers,
    data=data,
    cert=(cert_pem, private_key_pem),
    timeout=10
)

# 可选:查看响应结果
print(response.status_code)
print(response.text)

关键说明

  • Azure Key Vault中,上传的PFX证书会以PKCS12格式存储为secret,因此需要完整解析这个包才能拿到证书和私钥。
  • Requests的cert参数支持传入**(证书PEM字符串, 私钥PEM字符串)**的元组,无需保存到本地文件。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:52:50