2012-06-26 3 views
3

настроить сервер FTP в IIS с SSL сертификатом, который я создал мой сам (с помощью Makecert.exe и Pvk2Pfx). Я приписал файл PFX моему FTP-серверу.C# не доверчивый установленный сертификат

У меня есть # сценарий C, который подключается к FTP-серверу и всегда получает следующее сообщение об ошибке:

System.Security.Authentication.AuthenticationException: Удаленный сертификат недействителен в соответствии с процедурой проверки.

Я установил сертификат в «Доверенные корневые центры сертификации» на локальном компьютере и в качестве пользователя.

Как не проходит проверку подлинности, я посмотрел через C# на магазине:

X509Store store = new X509Store(StoreName.AuthRoot, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 

foreach (X509Certificate2 mCert in store.Certificates) 
{ 
    var friendlyName = mCert.Issuer; 
    Console.WriteLine(friendlyName); 
} 
store.Close(); 

Но мой сертификат в списке нет. Когда я открываю MMC console, я вижу свой сертификат.

+0

Какая причина, что это дает для не доверять? – Ben

+0

Помог ли вам ответ? Если да, примите, пожалуйста, ответ, если не добавить информацию для уточнения. – Sascha

+0

Простите, Саша, но я не могу сразу ответить вам. Я занят другим проектом, который был приоритетом. Я уточню, как только смогу. Спасибо за помощь. – Jeppen

ответ

2

Обычно C# не доверяет сертификатам без доверенного корневого сертификата - например, в случае самозаверяющего сертификата. ServicePointManager позволяет добавить функцию, в которой вы можете самостоятельно управлять трастами.

// Callback used to validate the certificate in an SSL conversation 
private static bool ValidateRemoteCertificate(
    object sender, 
    X509Certificate certificate, 
    X509Chain chain, 
    SslPolicyErrors policyErrors) 
{ 
    if (Convert.ToBoolean(ConfigurationManager.AppSettings["IgnoreSslErrors"])) 
    { 
     // Allow any old dodgy certificate... 
     return true; 
    } 
    else 
    { 
     return policyErrors == SslPolicyErrors.None; 
    } 
} 

private static string MakeRequest(string uri, string method, WebProxy proxy) 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri); 
    webRequest.AllowAutoRedirect = true; 
    webRequest.Method = method; 

    // Allows for validation of SSL conversations 
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(
    ValidateRemoteCertificate); 

    if (proxy != null) 
    { 
     webRequest.Proxy = proxy; 
    } 

    HttpWebResponse response = null; 
    try 
    { 
     response = (HttpWebResponse)webRequest.GetResponse(); 
     using (Stream s = response.GetResponseStream()) 
     { 
      using (StreamReader sr = new StreamReader(s)) 
      { 
       return sr.ReadToEnd(); 
      } 
     } 
    } 
    finally 
    { 
     if (response != null) 
      response.Close(); 
    } 
} 

От блоге How to accept an invalid SSL certificate programmatically.

1

Как быстро решить эту проблему, вы могли бы принять все сертификаты с:

ServicePointManager.ServerCertificateValidationCallback += (o, c, ch, er) => true;