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

基于Ubuntu的Linux环境下使用MSAL加载PEM证书获取访问令牌问题咨询

解决方案

报错的核心原因是Linux环境下的PowerShell(基于.NET Core)使用默认构造函数加载合并了私钥和证书的PEM文件时,不会自动将私钥关联到证书对象,和是否配置证书存储无关。MSAL本身支持直接传入带私钥的X509Certificate2对象,不需要依赖Windows体系的证书存储路径。

方案1:使用PEM文件直接加载(适配PowerShell 7.2+,当前Ubuntu代理默认PowerShell版本均满足要求)

直接调用.NET内置的PEM加载方法,自动关联私钥:

# 直接加载包含私钥和证书的PEM文件,自动绑定私钥
$Certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::CreateFromPemFile("$env:AGENT_TEMPDIRECTORY/mycert.pem")

方案2:适配低版本PowerShell/自定义加载逻辑

如果方案1不可用,可以手动加载私钥后关联到证书:

# 读取PEM文件全部内容
$pemContent = Get-Content -Raw "$env:AGENT_TEMPDIRECTORY/mycert.pem"
# 拆分私钥和证书部分
$privateKeyBlock = $pemContent -split "-----END PRIVATE KEY-----" | Select-Object -First 1
$privateKeyBlock += "-----END PRIVATE KEY-----"
$certBlock = $pemContent -split "-----BEGIN CERTIFICATE-----" | Select-Object -Last 1
$certBlock = "-----BEGIN CERTIFICATE-----`n" + $certBlock

# 加载证书
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new([System.Text.Encoding]::ASCII.GetBytes($certBlock))
# 加载私钥
$privateKey = [System.Security.Cryptography.RSA]::Create()
$privateKey.ImportFromPem($privateKeyBlock)
# 关联私钥到证书
$cert = $cert.CopyWithPrivateKey($privateKey)
$Certificate = $cert

方案3:直接使用原始无密码PFX文件(兼容性最高)

不用转换为PEM格式,直接加载原始PFX文件,指定跨平台兼容的密钥存储标记:

$Certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new(
    "$env:AGENT_TEMPDIRECTORY/mycert.pfx", 
    "", 
    [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::EphemeralKeySet -bor 
    [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
)

验证与调用

加载完成后先验证私钥状态,再调用MSAL接口:

# 验证私钥是否正常加载
if (-not $Certificate.HasPrivateKey) {
    throw "证书私钥加载失败,请检查文件完整性"
}

# 直接传入证书对象调用Get-MsalToken即可,无需走证书存储路径
Get-MsalToken -ClientId "你的客户端ID" -TenantId "你的租户ID" -ClientCertificate $Certificate -Scope "你需要的权限范围"

注意事项

  • 加载带密码的私钥/证书时,将对应构造方法的空密码参数替换为实际密码即可
  • Linux环境下不要使用PersistKeySet存储标记,该标记仅适配Windows证书存储,会导致加载失败
  • 确保PEM/PFX文件没有损坏,首尾的格式标记完整,无多余的空白字符或转义字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:06:10