Команда Add-Certificate предназначена для загрузки сертификата (обычно с закрытым ключом) в размещенную службу. IIRC попытается обернуть файл .cer оболочкой .pfx и загрузить его с простым паролем. Это происходит потому, что на портале требовались пароли с сертификатами (предполагалось, что люди загружают сертификаты только с закрытыми ключами). Что-то в этом пути кода может быть неправильным из-за криптографического исключения. Хотелось бы, чтобы было больше трассировки стека, чтобы увидеть.
Если вы загружаете pfx (с экспортируемым ключом), это работает? Это просто проблема из-за файла .cer и отсутствия пароля?
Другая мысль: параметр -ServiceName может быть чувствителен к регистру при преобразовании в DNS-имя (servicename.cloudapp.net). Можете ли вы убедиться, что вы используете все строчные буквы?
Редактировать: еще одна мысль - попробуйте импортировать .cer в вашу систему и использовать get-item cert: format, чтобы снова обратиться к нему. Глядя на код, я не совсем уверен, что он будет правильно работать с указанным путем к файлу, если это не pfx. Я предполагаю, что импорт файла .cer с пустым паролем может завершиться неудачно. Это только при запуске кода, который я вижу через мой внутренний (интеллектуальный) отладчик:
private byte[] GetCertificateData()
{
var cert = new X509Certificate2();
byte[] certData = null;
if (((this.CertificateToDeploy is PSObject) && ((PSObject)this.CertificateToDeploy).ImmediateBaseObject is X509Certificate) ||
(this.CertificateToDeploy is X509Certificate))
{
cert = ((PSObject)this.CertificateToDeploy).ImmediateBaseObject as X509Certificate2;
try
{
certData = cert.HasPrivateKey ? cert.Export(X509ContentType.Pfx) : cert.Export(X509ContentType.Pkcs12);
}
catch (CryptographicException)
{
certData = cert.HasPrivateKey ? cert.RawData : cert.Export(X509ContentType.Pkcs12);
}
}
else
{
cert.Import(this.ResolvePath(this.CertificateToDeploy.ToString()), this.Password, X509KeyStorageFlags.Exportable);
certData = cert.HasPrivateKey ? cert.Export(X509ContentType.Pfx, this.Password) : cert.Export(X509ContentType.Pkcs12);
}
return certData;
}