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

如何获取.cer证书符合Azure AD客户端断言要求的签名值

解决方案

你之前用openssl输出的是格式化的人类可读十六进制文本,并非Azure要求的URL安全Base64编码格式,按以下步骤操作即可拿到符合要求的签名:

核心转换逻辑

你拿到的冒号分隔十六进制签名只需要两步转换:

  • 先删除十六进制字符串中的所有冒号、空格、换行,得到连续纯十六进制串
  • 将十六进制串转为URL安全的Base64编码(即JWT兼容编码,规则:普通Base64编码后将+替换为-、/替换为_,删除末尾所有=填充字符)

Linux/macOS 一步执行命令

openssl x509 -inform der -in "path\Certiftest.cer" -noout -text \
| grep -A 100 "Signature Algorithm: sha256WithRSAEncryption" \
| tail -n +2 \
| tr -d ':\n ' \
| xxd -r -p \
| base64 \
| tr '+/' '-_' \
| tr -d '='

Windows PowerShell 一步执行命令

# 提取纯十六进制签名
$sigHex = (openssl x509 -inform der -in "path\Certiftest.cer" -noout -text | Select-String -Pattern "Signature Algorithm: sha256WithRSAEncryption" -Context 0,20 | ForEach-Object { $_.Context.PostContext } | Out-String) -replace '[^0-9a-fA-F]',''
# 十六进制转二进制
$sigBytes = [byte[]]::new($sigHex.Length / 2)
for($i=0; $i -lt $sigHex.Length; $i+=2) {
    $sigBytes[$i/2] = [Convert]::ToByte($sigHex.Substring($i,2), 16)
}
# 转URL安全Base64编码
$sigBase64 = [Convert]::ToBase64String($sigBytes) -replace '\+','-' -replace '/','_' -replace '=+$',''
# 输出结果
$sigBase64

执行后输出的字符串即可匹配Azure官方文档的示例格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:54:07