В чем разница между расширенным строгим именем (SNK) и форматом личного обмена (PFX) и когда следует использовать каждый из них?

Этот вопрос является продолжением следующего:

Я смотрю на Strong Naming для настраиваемой сборки вместе с кодом, подписывающим ее, и читал различные сообщения SO (см. Выше) и MSDN. Я понимаю следующее:

  1. Строгое именование сборки без пароля создает файл SNK и идентифицирует только издателя сборки, чтобы ее можно было развернуть в GAC и смягчить так называемый DLL Hell, вызванный сборками с одинаковыми именами от разных издателей .
  2. Строгое именование сборки паролем добавляет к сборке подпись кода и создает файл PFX вместо файла SNK. Это одновременно идентифицирует издателя и подтверждает, что код не был изменен. Примечание. Этот файл может быть создан и, следовательно, импортирован доверенным центром сертификации, таким как Verisign и Digicert, или это может быть самозаверяющий сертификат, созданный внутри организации. Самостоятельное создание PFX - это тот же шаг, что и создание сборки со строгим именем, но вы просто добавляете к ней пароль.
  3. Расширенное строгое именование кажется мне загадкой. Он включает в себя создание файла SNK со строгим именем (т. Е. Без пароля) и последующее извлечение из него закрытого ключа. Похоже, это только для разрешения перехода с устаревших алгоритмов хеширования.

Я понимаю, что 2 является логическим продолжением 1. Правильно ли я понял выше? Но в чем разница между 2 и 3 выше? Имеет ли 3 какое-либо преимущество перед 1 или это просто способ разрешить миграцию только между алгоритмами? Другими словами, я полагаю, что 2 и 3 существуют по разным причинам; что это за причина / реализация?


person J Weezy    schedule 01.02.2021    source источник


Ответы (1)


Дополнение к 1: вам нужно строгое именование, чтобы гарантировать отсутствие ссылок на неподписанную сборку. Возможно, вы не захотите использовать GAC.

Исправление к 2: подпись кода! = Строгое именование. для сильного именования используйтеsn.exe для создания ключа. Для подписи кода необходим цифровой сертификат x.509 с его закрытым ключом. Сам сертификат не имеет пароля. Пароль используется контейнерным форматом PFX / PKCS # 12 для защиты закрытого ключа. Другие варианты. как например возможна смарт-карта или токен.

Таким образом, 2 НЕ является расширением к 1. 3 имеет преимущество использования лучших алгоритмов хеширования и двух вместо одной подписи.

person Daniel Fisher lennybacon    schedule 03.02.2021
comment
Спасибо, что прояснили это. Я задал дополнительный вопрос здесь: stackoverflow.com/q/66029465/4630376 - person J Weezy; 03.02.2021