Linux:将 pfx 转换为 snk - 或:如何对程序集进行强命名

问题描述 投票:0回答:1

我使用的是Linux。该平台是一个开发容器,因此底层操作系统可能会有所不同。

我正在使用

dotnet build
来编译
.csproj
项目。 (
.csproj
是新的sdk格式。)

我需要对生成的程序集进行强命名。但是,我只有一个受密码保护的

.pfx
文件(而且我知道密码)。

如何将该

.pfx
文件转换为
dotnet
工具可以在 Linux 上消化的内容?

似乎不支持直接用

.pfx
签名。看来我需要一个不受密码保护的
.snk
文件。然而,在花了几个小时使用 Google 和 ChatGPT 后,我似乎无法找到一种方法来创建包含
.snk
文件中的公钥和私钥的
.pfx
文件。我仍然不确定
.snk
文件是否是正确的方法。

这里有人能帮我解决这个问题吗?再次强调,这是 Linux,不是 Windows。在 Windows 上这会很容易(呃)。

平台:

  • 一些Linux操作系统
  • 安装了 mono(包括 sn 工具)
  • 已安装 OpenSSL
  • dotnet已安装
  • PowerShell已安装

如果需要,可以添加其他开源工具。

输入:

  • something.cs
  • something.csproj
  • aPasswordProtected.pfx

输出:

  • 强名称签名的 .dll 文件

流程:

  • 从这里开始有几种可能的路径。我目前没有偏好。
    • 转换密钥,并在
      .csproj
      文件中引用转换后的文件。
    • 转换密钥。使用
      dotnet build
      创建未签名的程序集。事后使用其他工具对程序集进行签名。
    • 同时使用另一个工具来编译和签名。

此时我也不关心安全问题。让我们先让它工作起来。然后我们就可以思考如何安全地存储不受保护的密钥文件。

c# linux mono code-signing x509certificate2
1个回答
0
投票

明白了。创建

.snk
文件需要一个中间步骤来制作
.pem
文件(无需密码)。这是 PowerShell 脚本:

& openssl pkcs12 -in "$pfxFilePath" -out "$pemFilePath" -nodes -passin pass:$pfxPassword

$rsa = New-Object System.Security.Cryptography.RSACryptoServiceProvider
$pemContent = Get-Content -Path "$pemFilePath" -Raw

$rsa.ImportFromPem($pemContent.ToCharArray())
$keyPair = $rsa.ExportCspBlob($true)

[System.IO.File]::WriteAllBytes($snkFilePath, $keyPair)

这个

.snk
文件您可以直接在您的
.csproj
文件中引用,如下所示:

<PropertyGroup>
  <SignAssembly>true</SignAssembly> 
  <AssemblyOriginatorKeyFile>$(snkFilePath)</AssemblyOriginatorKeyFile>
</PropertyGroup>

将 $snkFilePath 传递到

dotnet
,如下所示(在 PowerShell 中):

& dotnet build /p:snkFilePath=$snkFilePath
© www.soinside.com 2019 - 2024. All rights reserved.