如何在C#中建立ssl连接时检查无效凭据

时间:2012-01-06 13:02:54

标签: c# .net ssl authorization snmp

我有这个方法试图捕获在通过SSL连接时提供无效凭据时可能抛出的异常。凭据通过SNMP提供。但我并不总是能够将异常解释为无效凭据,因为您可以看到我只是尝试读取抛出的异常消息,该消息因设备而异。

我在做什么是正确的?是否有任何万无一失的方法来检查连接所需的凭据是否有效?随着异常消息从设备变为设备,我完全迷失在这里。

感谢您的任何指示。

try
{
    string ipSSL = string.Format(URL_CWIS_HELPSTRING, "s", SecurityBindingProxy.Destination.Address.Value.Host, "/");
    System.Net.WebRequest https = System.Net.HttpWebRequest.Create(ipSSL);
    System.Net.ServicePointManager.ServerCertificateValidationCallback = WsdlClient.ServiceRequirements.WsdlServiceRequirements.SSLCheckCallback;
    https.Credentials = new System.Net.NetworkCredential(SNMP.ConnectionInfo.Instance.Username, SNMP.ConnectionInfo.Instance.Password); ;
    System.Net.HttpWebResponse responseSSL = (System.Net.HttpWebResponse)https.GetResponse();
    responseSSL.Close();
}
catch (Exception ex)
{
    if (ex.Message.Contains("Unauthorized")
        || ex.Message.Contains("401"))
    {
        return -2;
    }
}

1 个答案:

答案 0 :(得分:2)

您希望捕获更具体的异常类型,而不是解析异常消息。如果您查看GetResponse的文档,您会看到记录的异常类型。如果您捕获WebException,那么这将允许您在不解析字符串的情况下找到HTTP状态,例如:

catch (System.Net.WebException ex)
{
    var errorResponse = (System.Net.HttpWebResponse)ex.Response;
    if (errorResponse.StatusCode == System.Net.HttpStatusCode.Unauthorized)
    {
        //...
    }
}