如何以编程方式向Azure Key Vault导入EC密钥
Azure Key Vault 编程导入EC密钥方案
Azure 门户仅支持向 Key Vault 导入 RSA 密钥,你可以在门户中生成EC 密钥,但无法直接通过门户界面导入该类型密钥,编程调用Key Vault接口即可实现EC密钥导入,以下是经实践验证可用的PowerShell实现脚本:
# 读取PKCS8格式的EC私钥文件,移除PEM头尾标记 $p8Raw = Get-Content -Path .\KEY.p8 | ? {$_ -ne '-----BEGIN PRIVATE KEY-----' -and $_ -ne '-----END PRIVATE KEY-----'} $p8Bytes = [System.Convert]::FromBase64String($p8Raw -join '') # 导入私钥,提取EC密钥参数 $cng = [System.Security.Cryptography.ECDsaCng]::Create() $len = $null $cng.ImportPkcs8PrivateKey($p8Bytes, [ref] $len) $params = $cng.ExportParameters($true) # 实现Base64Url编码转换,适配JWK格式规范 $ToBase64Url = { Param($Content) [System.Convert]::ToBase64String($Content).Replace('+', '-').Replace('/', '_').Replace('=', '') } # 组装EC类型的JWK结构 $pubX = & $ToBase64Url -Content $params.Q.X $pubY = & $ToBase64Url -Content $params.Q.Y $prvD = & $ToBase64Url -Content $params.D $jwk = @{ crv = 'P-256'; d = $prvD; kty = 'EC'; x = $pubX; y = $pubY } $RequestPayload = @{ key = $jwk } | ConvertTo-Json # 交互式获取Azure访问令牌,执行前请替换$ClientId、$TenantId、$VaultUri、$KeyName为环境实际值 $token = Get-MsalToken -Scope 'https://vault.azure.net/user_impersonation' -ClientId $ClientId -TenantId $TenantId -Interactive # 调用Key Vault接口完成密钥导入 Invoke-WebRequest -Uri "${VaultUri}keys/${KeyName}?api-version=7.3" -Authentication Bearer -Token ($token.AccessToken | ConvertTo-SecureString -AsPlainText -Force) -Method Put -Body $RequestPayload -ContentType 'application/json'
使用提示:
- 脚本默认适配P-256曲线的EC密钥,若使用P-384、P-521等其他曲线,请对应修改
crv字段取值- 执行脚本前需先安装MSAL.PS模块,否则
Get-MsalToken命令无法正常使用
内容的提问来源于stack exchange,提问作者James S.
相关产品推荐
相关产品推荐

