我有一个pfx
格式的Sectigo颁发的代码签名证书。我想为延迟签名.NET程序集创建一个snk
文件。我遵循了this和this问题的答案,但无法获得有效的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
不会立即抱怨,但是尝试完成对延迟签名的程序集的签名无论如何都会失败。