У нас есть сервер сборки, который содержит наш закрытый ключ, используемый для подписи сборок с подписью с задержкой, в контейнере ключей. Сейчас мы создаем еще один сервер сборки, и никто, кажется, не знает, где находится исходный файл ключа, поэтому мы пытаемся экспортировать ключ с исходного сервера и импортировать на новый.
Для экспорта мы используем это:
RSACryptoServiceProvider key;
CspParameters cp = new CspParameters();
cp.KeyContainerName = "nameOfOurContainer";
cp.Flags = CspProviderFlags.UseMachineKeyStore;
key = new RSACryptoServiceProvider(cp);
var blob = key.ExportCspBlob(true);
using (var fs = new FileStream(filePath, FileMode.CreateNew))
{
fs.Write(blob, 0, blob.Length);
}
для импорта - это
CspParameters cp = new CspParameters();
cp.KeyContainerName = containerName;
cp.Flags = CspProviderFlags.UseMachineKeyStore;
cp.KeyNumber = (int)KeyNumber.Signature;
RSACryptoServiceProvider key = new RSACryptoServiceProvider(cp);
using (var fs = new FileStream(filePath, FileMode.Open))
{
var blob = new byte[fs.Length];
fs.Read(blob,0,(int)fs.Length);
key.ImportCspBlob(blob);
key.PersistKeyInCsp = true;
}
Ключи успешно экспортируются и импортируются, но подпись на новом сервере не работает - мы получаем
Key pair does not match public key from assembly
Итак, я подозреваю, что процесс импорта или экспорта неправильный. Идеи?