Esta documentación está archivada y no tiene mantenimiento.

ICertificatePolicy (Interfaz)

Actualización: noviembre 2007

Valida un servidor de certificados.

Espacio de nombres:  System.Net
Ensamblado:  System (en System.dll)

public interface ICertificatePolicy
public interface ICertificatePolicy
public interface ICertificatePolicy

La interfaz ICertificatePolicy se utiliza con el fin de proporcionar validación personalizada de certificados de seguridad para una aplicación. La directiva predeterminada consiste en admitir los certificados válidos, hayan o no caducado. Para cambiar esta directiva se debe implementar la interfaz ICertificatePolicy con una directiva diferencia y, a continuación, asignarla a la propiedad ServicePointManager.CertificatePolicy.

ICertificatePolicy utiliza el estándar SSPI (Security Support Provider Interface). Para obtener más información, consulte la documentación de SSPI en MSDN.

En el ejemplo siguiente se crea una directiva de certificado que devuelve false para cualquier problema de certificado e imprime un mensaje que indica el problema en la consola. La enumeración CertificateProblem define constantes SSPI para los problemas con certificados, mientras que el método GetProblemMessage privado crea un mensaje imprimible sobre el problema.

public  enum    CertificateProblem  : long
{
        CertEXPIRED                   = 0x800B0101,
        CertVALIDITYPERIODNESTING     = 0x800B0102,
        CertROLE                      = 0x800B0103,
        CertPATHLENCONST              = 0x800B0104,
        CertCRITICAL                  = 0x800B0105,
        CertPURPOSE                   = 0x800B0106,
        CertISSUERCHAINING            = 0x800B0107,
        CertMALFORMED                 = 0x800B0108,
        CertUNTRUSTEDROOT             = 0x800B0109,
        CertCHAINING                  = 0x800B010A,
        CertREVOKED                   = 0x800B010C,
        CertUNTRUSTEDTESTROOT         = 0x800B010D,
        CertREVOCATION_FAILURE        = 0x800B010E,
        CertCN_NO_MATCH               = 0x800B010F,
        CertWRONG_USAGE               = 0x800B0110,
        CertUNTRUSTEDCA               = 0x800B0112
}

public class MyCertificateValidation : ICertificatePolicy
{
    // Default policy for certificate validation.
    public static bool DefaultValidate = false; 

    public bool CheckValidationResult(ServicePoint sp, X509Certificate cert,
       WebRequest request, int problem)
    {        
        bool ValidationResult=false;
        Console.WriteLine("Certificate Problem with accessing " +
           request.RequestUri);
        Console.Write("Problem code 0x{0:X8},",(int)problem);
        Console.WriteLine(GetProblemMessage((CertificateProblem)problem));

        ValidationResult = DefaultValidate;
        return ValidationResult; 
    }

    private String GetProblemMessage(CertificateProblem Problem)
    {
        String ProblemMessage = "";
        CertificateProblem problemList = new CertificateProblem();
        String ProblemCodeName = Enum.GetName(problemList.GetType(),Problem);
        if(ProblemCodeName != null)
           ProblemMessage = ProblemMessage + "-Certificateproblem:" +
              ProblemCodeName;
        else
           ProblemMessage = "Unknown Certificate Problem";
        return ProblemMessage;
     }
}



public class CertificateProblem
{
    public static final int certEXPIRED = 0x800B0101;
    public static final int certVALIDITYPERIODNESTING = 0x800B0102;
    public static final int certROLE = 0x800B0103;
    public static final int certPATHLENCONST = 0x800B0104;
    public static final int certCRITICAL = 0x800B0105;
    public static final int certPURPOSE = 0x800B0106;
    public static final int certISSUERCHAINING = 0x800B0107;
    public static final int certMALFORMED = 0x800B0108;
    public static final int certUNTRUSTEDROOT = 0x800B0109;
    public static final int certCHAINING = 0x800B010A;
    public static final int certREVOKED = 0x800B010C;
    public static final int certUNTRUSTEDTESTROOT = 0x800B010D;
    public static final int certREVOCATION_FAILURE = 0x800B010E;
    public static final int certCN_NO_MATCH = 0x800B010F;
    public static final int certWRONG_USAGE = 0x800B0110;
    public static final int certUNTRUSTEDCA = 0x800B0112;

    public String GetEnumCertificateProblem(int problem)
    {
        switch (problem) {
            case 0x800B0101 :
                return "CertExpired";
            case 0x800B0102 :
                return "CertVALIDITYPERIODNESTING";
            case 0x800B0103 :
                return "CertROLE";
            case 0x800B0104 :
                return "CertPATHLENCONST";
            case 0x800B0105 :
                return "CertCRITICAL";
            case 0x800B0106 :
                return "CertPURPOSE";
            case 0x800B0107 :
                return "CertISSUERCHAINING";
            case 0x800B0108 :
                return "CertMALFORMED";
            case 0x800B0109 :
                return "CertUNTRUSTEDROOT";
            case 0x800B010A :
                return "CertCHAINING";
            case 0x800B010C :
                return "CertREVOKED";
            case 0x800B010D :
                return "CertUNTRUSTEDTESTROOT";
            case 0x800B010E :
                return "CertREVOCATION_FAILURE";
            case 0x800B010F :
                return "CertCN_NO_MATCH";
            case 0x800B0110 :
                return "CertWRONG_USAGE";
            case 0x800B0112 :
                return "CertUNTRUSTEDCA";
            default :
                return null;
        }
    }//GetEnumCertificateProblem
}//CertificateProblem

public class MyCertificateValidation implements ICertificatePolicy
{
    // Default policy for certificate validation.
    public static boolean defaultValidate = false;

    public boolean CheckValidationResult(ServicePoint sp, X509Certificate cert,
                                        WebRequest request, int problem)
    {
        boolean validationResult = false;

        Console.WriteLine(("Certificate Problem with accessing "
            + request.get_RequestUri()));
        Console.Write("Problem code 0x{0:X8},", 
            ((System.Int32)(problem)).ToString("X8"));
        Console.WriteLine(GetProblemMessage((problem)));
        validationResult = defaultValidate;
        return validationResult;
    } //CheckValidationResult

    private String GetProblemMessage(int problem)
    {
        String problemMessage = "";
        CertificateProblem problemList = new CertificateProblem();        
        String problemCodeName = problemList.GetEnumCertificateProblem(problem);
        if (problemCodeName != null) {
            problemMessage = problemMessage + "-Certificateproblem:"
                + problemCodeName;
        }
        else {
            problemMessage = "Unknown Certificate Problem";
        }
        return problemMessage;
    } //GetProblemMessage
} //MyCertificateValidation    


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0
Mostrar: