У меня есть проблемы с сертификатом подписи кода Sectigo в формате pfx
. Я хочу создать файл snk
для отложенной подписи сборок .NET. Я следовал за ответами на этот и этот вопрос, но не могу получить рабочий 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: Кажется, что проблема связана либо с размером ключа или с флагами в 32-байтовом заголовке файла snk
. Я взял 2048-битный ключ, дополнил его нулями до 4096-битного, добавил 32-байтовый заголовок из старого рабочего 544-байтового snk
файла и создал новый 544-байтовый snk
с 2048-битным ключом , Этот новый snk
«работает» в терминах, которые sn.exe
не будут жаловаться немедленно, но попытки завершить подпись сборки с задержкой подписи все равно будут неудачными.