У меня есть приложение, написанное на C # MVC 4, которое будет работать на сервере, у которого есть один сертификат внутри проекта, в папке App_Data.Мне нужно получить этот файл сертификата для доступа к веб-службе.Сервер - Windows Server 2012, использующий iis7.
Локальный код работает, как и ожидалось, но на сервере он не работает.Там я получаю сообщение " Системе не удается найти указанный файл ".Но этот файл есть (я возвращаю содержимое этого каталога и предыдущего, получая их в консоли браузера).Я попытался переименовать сертификат из .pfx в .pcertx (случайный) и снова не работает на сервере, хотя он работает локально.
Вот код, который я использую, чтобы попытаться получить этоfile:
public string getCertificado()
{
string path = string.Empty;
try
{
path = HttpContext.Current.Server.MapPath(@"~\App_Data\CERTIFICATE.pcertx");
Byte[] rawCert = File.ReadAllBytes(path);
String certificado = Convert.ToBase64String(rawCert);
_X509Cert.Import(Convert.FromBase64String(certificado), "PASSWORD", X509KeyStorageFlags.PersistKeySet);
client.AddCerts(new X509Certificate[] { _X509Cert });
return string.Empty;
}
catch (Exception ex)
{
// In case of error, list the content of the current directory and the previous
string[] filePaths = Directory.GetFiles(HttpContext.Current.Server.MapPath(@"~\App_Data"));
string pastaAnterior = Path.GetFullPath(Path.Combine(HttpContext.Current.Server.MapPath(@"~\App_Data"), @"..\"));
string[] filePathsAnt = Directory.GetFiles(pastaAnterior);
return "Cannot get certificate." + ex.Message + "; " + ex.InnerException + "; Path: " + path + "; Folder content: " + string.Join("\n",filePaths) + "; Previous folder content" + string.Join("\n",filePathsAnt);
}
}
Вот что я получаю из консоли браузера:
"Não foi possível obter nenhum Certificado. Системе не удается найти указанный файл.
Путь: C: \ Unisys \ Management \ Applications \ sicopplustest \ App_Data \ CERTIFICATE.pcertx;
Паста Caminho: C: \ Unisys \ Management \ Applications \ sicopplustest \ App_Data \ CERTIFICATE.pcertx C: \ Unisys \ Management \Приложения \ sicopplustest \ App_Data \ DynamicAspx.xsl;
паста Caminho anteriorC: \ Unisys \ Management \ Applications \ sicopplustest \ ApplicationInfo.Debug.xml C: \ Unisys \ Management \ Applications \ sicopplustest \ ApplicationInfo.Release.xmlC: \ Unisys \ Management \ Applications \ sicopplustest \ ApplicationInfo.xml ... "
Если я получу сертификат правильно, сообщение не будет отправлено.
Я думаю, что оно может быть повторнов безопасности, но как я могу это исправить?Я не знаю, как справиться с этой ситуацией.