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

能否使用Azure Trusted Signing为ClickOnce清单签名?求解决方案

使用Azure Trusted Signing为ClickOnce清单签名的可行方案

不用依赖Mage或Velopac,你可以通过以下两种方式实现Azure Trusted Signing对ClickOnce清单的签名:

方案一:调用Azure Trusted Signing REST API + 自定义脚本

ClickOnce清单本质是带特定结构的XML文件,Azure Trusted Signing的REST API支持对这类文件进行代码签名,步骤如下:

  1. 生成未签名的ClickOnce清单

    • 通过Visual Studio发布项目时,在发布设置中取消勾选"签名清单"选项,直接生成未签名的.manifest和.application文件;
    • 或使用MSBuild命令生成:msbuild YourProject.csproj /t:Publish /p:PublishDir=./publish /p:SignManifests=false
  2. 编写脚本调用API签名

    • 先获取Azure AD访问令牌,用于调用Trusted Signing API:
      $token = az account get-access-token --resource https://management.azure.com --query accessToken --output tsv
      
    • 构造API请求,将未签名的清单文件内容发送到Trusted Signing服务,获取签名后的内容:
      $manifestContent = Get-Content -Path "./publish/YourApp.manifest" -Raw
      $body = @{
          fileContent = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($manifestContent))
          signingParameters = @{
              signatureAlgorithm = "SHA256"
              timestampParameters = @{
                  timestampUri = "http://timestamp.digicert.com"
              }
          }
      } | ConvertTo-Json
      
      $signedContent = Invoke-RestMethod -Uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CodeSigning/codeSigningAccounts/{accountName}/sign?api-version=2024-02-01" -Method Post -Headers @{Authorization = "Bearer $token"} -Body $body -ContentType "application/json"
      
      # 将签名后的内容写入文件
      [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($signedContent.signedFileContent)) | Out-File "./publish/YourApp.manifest" -Encoding UTF8
      
    • 重复上述步骤对.application文件进行签名
  3. 验证签名有效性

    • 使用signtool verify /pa /v ./publish/YourApp.manifest命令确认签名成功

方案二:使用Azure CLI的Trusted Signing扩展

如果你的环境已安装Azure CLI及Trusted Signing扩展,可以直接通过命令行完成签名:

  1. 安装扩展:az extension add --name trusted-signing
  2. 签名清单文件:
    az trusted-signing sign \
      --account-name <your-signing-account-name> \
      --resource-group <your-resource-group> \
      --file-path ./publish/YourApp.manifest \
      --output-file ./publish/Signed_YourApp.manifest \
      --signature-algorithm SHA256 \
      --timestamp-uri http://timestamp.digicert.com
    
  3. 替换原未签名清单,完成后测试ClickOnce部署流程

注意事项

  • 确保你的Azure账户拥有Trusted Signing服务的CodeSigningAccounts.Sign权限
  • 签名前需保证清单文件的哈希值正确,避免后续部署时出现验证错误
  • 测试时需确保客户端信任Azure Trusted Signing的证书链,必要时可提前部署根证书到客户端机器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:23:20