使用SN.EXE将PFX转换为SNK会生成无效文件

时间:2019-05-28 14:47:27

标签: code-signing pfx code-signing-certificate snk sn.exe

我有一个pfx格式的Sectigo颁发的代码签名证书。我想为延迟签名.NET程序集创建一个snk文件。我遵循了thisthis问题的答案,但无法获得有效的snk文件。

尤其是,我使用sn.exe来生成它,如下所示:

sn.exe -p codesign.pfx codesign.snk

看起来不错:

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Enter the password for the PKCS#12 key file:
Public key written to codesign.snk

但是,当使用sn.exe -tp codesign.snk转储产生的文件的内容时,出现以下错误:

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Failed to convert key to token -- Invalid assembly public key.

在构建过程中尝试对组件进行延迟签名时,会发生相同的错误。

创建snk文件的正确过程是什么?我认为sn.exe不能正确处理证书。我以前的snk来自很久以前GoDaddy颁发的代码签名证书,它有544个字节,而现在生成的只有288个字节。

更新1:大小不同是由于公共密钥大小不同。旧证书的密钥为4096位,而新证书的密钥为(只有!)2048位。文件头的不同之处在于4个字节。将sn.exe -tp用于旧作品,而不是新作品。

更新2::问题似乎与 与密钥大小snk文件中的标志有关32字节的标头。我取了2048位密钥,用零填充到4096位,然后从旧的544字节snk文件中添加了32字节的标头,并使用2048位密钥。这个新的snk的工作原理是snk不会立即抱怨,但是尝试完成对延迟签名的程序集的签名无论如何都会失败。

0 个答案:

没有答案