public __value 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 __gc class MyCertificateValidation : public ICertificatePolicy
{
// Default policy for certificate validation.
public:
static bool DefaultValidate = false;
bool CheckValidationResult(ServicePoint* /*sp*/, X509Certificate* /*cert*/,
WebRequest* request, int problem)
{
bool ValidationResult=false;
Console::WriteLine(S"Certificate Problem with accessing {0}", request->RequestUri);
Console::Write(S"Problem code 0x{0:X8},", __box((int)problem));
Console::WriteLine(GetProblemMessage((CertificateProblem)problem));
ValidationResult = DefaultValidate;
return ValidationResult;
}
private:
String* GetProblemMessage(CertificateProblem Problem)
{
String* ProblemMessage = S"";
CertificateProblem problemList = CertificateProblem();
String* ProblemCodeName = Enum::GetName(__box(problemList)->GetType(),__box(Problem));
if(ProblemCodeName != 0)
ProblemMessage = String::Concat( ProblemMessage, S"-Certificateproblem:", ProblemCodeName );
else
ProblemMessage = S"Unknown Certificate Problem";
return ProblemMessage;
}
};