【问题标题】:MAUI Blazor Cannot EV Code Sign with YubiKeyMAUI Blazor 无法使用 YubiKey 进行 EV 代码签名
【发布时间】:2023-02-26 05:32:20
【问题描述】:
我正在尝试使用我的 EV 代码签名证书对我的 MAUI Blazor (Windows) 应用程序进行代码签名。我已经在 YubiKey 5 FIPS 设备上安装了我的证书。当我运行以下命令时,应用程序开始构建。然后当需要签署包裹时,我被要求提供我的密码(用于 YubiKey)。输入密码后,我得到以下异常。
命令:
"C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\msbuild" /restore /t:Publish /p:TargetFramework=net6.0-windows10.0.19041 /p:configuration=release /p:GenerateAppxPackageOnBuild=true /p:AppxPackageSigningEnabled=true /p:PackageCertificateThumbprint="KeyThumbprint" /p:PackageCertificatePassword="password"
例外:
C:\Users\user\.nuget\packages\microsoft.windowsappsdk\1.0.0\build\Microsoft.Build.Msix.Packaging.targets(462,5): error
APPX1204: Failed to sign 'path/to/my.msix'
. SignTool Error: An unexpected internal error has occurred. [path/to/my/project.csproj]
C:\Users\user\.nuget\packages\microsoft.windowsappsdk\1.0.0\build\Microsoft.Build.Msix.Packaging.targets(462,5): error
APPX1204: [path/to/my/project.csproj]
另外,如果我尝试代码唱歌工具,我会收到以下错误:
"Error: SignerSign() failed." (-2146435068/0x80100004)
代码签名.exe 命令
signtool.exe sign /fd sha256 /a /sha1 my_thumbprint "path/to/my.msix"
在过去,我已经获得了一个自签名代码签名证书来工作。这将表明上述命令是正确的。
【问题讨论】:
标签:
c#
code-signing
maui
maui-blazor
【解决方案1】:
视觉工作室
您可以更新 MAUI .csproj 文件以包含以下内容。这将允许以开发者模式或使用 EV 证书登录。我没有具体使用过 YubiKey,但应该是一样的。务必更换A1B2C3...使用您的开发人员证书指纹和D4E5F6...带有您的 EV 代码证书指纹。
<PropertyGroup>
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<PackageCertificateThumbprint>A1B2C3...</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<PackageCertificateThumbprint>D4E5F6...</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="$(TargetFramework.Contains('-windows')) and '$(Configuration)' == 'Release'">
<GenerateAppxPackageOnBuild>true</GenerateAppxPackageOnBuild>
</PropertyGroup>
命令行界面
或者您可以在命令行中使用dotnet publish 命令来发布您的应用程序。再次,更换D4E5F6...带有您的 EV 代码证书指纹。并更换证书密码使用证书的密码(尽管我建议使用 PowerShell 变量来确保密码不在您的 CLI 历史记录中)
一些注意事项:
- 这目前适用于 Windows,您可以通过更新
-f 并删除 /p:GenerateAppxPackageOnBuild=true 来更改它
- 我还没有找到如何让
/p:PackageCertificatePassword 绕过 EV 代码证书(例如 SafeNet 身份验证客户端)的弹出窗口。因此,如果您使用的是此类证书,则需要在那里输入密码
dotnet publish myproj.csproj -c Release -f net6.0-windows10.0.19041.0 /p:GenerateAppxPackageOnBuild=true /p:AppxPackageSigningEnabled=true /p:PackageCertificateThumbprint="D4E5F6..." /p:PackageCertificatePassword="CertificatePassword"