Shows code that implements a System.Web.Mvc controller for serving certificates.
Banking app web service for certificate enrollment
The Windows Store app for banking requires a web service that provides a certificate from a trusted authority.
The following code example shows how to implement a System.Web.Mvc controller that serves a Personal Information Exchange (PFX) certificate.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using CERTCLILib; namespace BankServer.Controllers { public class EnrollmentController : Controller { internal abstract class Constants { // Constants for property IDs public const int CR_PROP_CAXCHGCERT = 15; //const int ants for data types and indexed status public const int PROPTYPE_BINARY = 0x3; //Constants for binary flags public const int CV_OUT_BASE64 = 0x1; public const int CR_DISP_ERROR = 0x1; public const int CR_DISP_DENIED = 0x2; public const int CR_DISP_ISSUED = 0x3; public const int CR_DISP_UNDER_SUBMISSION = 0x5; public const int CR_IN_BASE64HEADER = 0; public const int CR_IN_BASE64 = 0x1; public const int CR_IN_BINARY = 0x2; public const int CR_IN_ENCODEANY = 0xff; public const int CR_IN_FORMATANY = 0x00; public const int CR_IN_ROBO = 0x00200000; public const int CR_IN_PKCS10 = 0x100; public const int CR_IN_PKCS7 = 0x300; public const int CR_IN_CMC = 0x400; public const int CR_IN_FORMATMASK = 0xff00; public const int CR_IN_CLIENTIDNONE = 0x00400000; public const int CR_IN_CONNECTONLY = 0x00800000; public const int CR_OUT_BASE64HEADER = 0x0; public const int CR_OUT_BASE64 = 0x1; public const int FR_PROP_FULLRESPONSE = 1; // Binary } [HttpPost] public JsonResult Submit(string username, string password, string request) { const string CAConfig = "Devt-StandAloneCA.enrolldev.nttest.microsoft.com\\enrolldev-Devt-StandAlone-CA"; ICertRequest CertRequest = new CCertRequest(); CertRequest.Submit(Constants.CR_IN_ENCODEANY, request, "", CAConfig); string certificate = CertRequest.GetCertificate(Constants.CR_OUT_BASE64); var result = new JsonResult(); result.Data = new { certificate = certificate }; return result; } [HttpPost] public JsonResult GetPFX(string username) { // IX509Enrollment EnrollObj = new CX509Enrollment(); // EnrollObj.InitializeFromTemplateName(X509CertificateEnrollmentContext.ContextUser, "User"); // EnrollObj.Enroll(); // string pfx = EnrollObj.CreatePFX("1111", 0, EncodingType.XCN_CRYPT_STRING_BASE64HEADER); string password = "1111"; string friendlyName = "My WoodGrove Bank Certificate"; string pfx = "-----BEGIN CERTIFICATE-----" + "MIIOvwIBAzCCDnsGCSqGSIb3DQEHAaCCDmwEgg5oMIIOZDCCAd0GCSqGSIb3DQEH"+ "AaCCAc4EggHKMIIBxjCCAcIGCyqGSIb3DQEMCgECoIHMMIHJMBwGCiqGSIb3DQEM"+ "AQMwDgQIJ+Nwezsdl8sCAgfQBIGoaMEnoOeeyN09o99ySQDkqkf9xYIJMjINMWMQ"+ "FN4GywQMF7vULdpPMyia91gu0yfrRZqTgZyNkmitqhZC1J3GkeNp1t+ZS14in2Ga"+ "G8BD95U6W73CmQuSOME4V58b97KhmMcss6HTxnM1EPNIrJcVao7n7XGzXVTJ1xC4"+ "N2U9WJuVLd90tsy72dNSLEIU/XWKe5ZAtU1k0GC/W9gTu0DatRtUPk+M4SRvMYHj"+ "MBMGCSqGSIb3DQEJFTEGBAQBAAAAMF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBv"+ "AHMAbwBmAHQAIABTAG8AZgB0AHcAYQByAGUAIABLAGUAeQAgAFMAdABvAHIAYQBn"+ "AGUAIABQAHIAbwB2AGkAZABlAHIwbQYJKoZIhvcNAQkUMWAeXgBsAGUALQB1AHMA"+ "ZQByAF8AdgAzAC0AYgA3AGQAYgAwADkAOQBmAC0AYwA3ADAAMQAtADQAZABmADIA"+ "LQA5AGQANwA1AC0AYwBkADcAMAA1ADUAYwAyAGYAMgBmADgwggx/BgkqhkiG9w0B"+ "BwagggxwMIIMbAIBADCCDGUGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECERM"+ "AeQ4kPTeAgIH0ICCDDhlM+J/2aOsG15J3JYx9/XyzpaHZ831/7+t8FNoQMwMceS7"+ "enQKhdl9bpFOc0vIH2MXLlckleUFAuTnZ3WDAX+Co4ojhz3SiFNop6Zbj9tfY37R"+ "EBnTdhOgBsoZtI7gEWV6wT0tkaVnGo4Ya3jp9JRGSogCqaS2BeOqws7hYN7bxlXi"+ "DArm8K35qI882kOE8UlwB3STwJ66cA/BvMvpakTaP/5FShodnxoVjZr+fyDdqsIL"+ "rCGFh+rafjYw5PMMnHFfpoZyY9QWamY/gQTEo8DWHUusElRHGOusiUED+8mrE8qs"+ "TvarLyopuY+59V05GXFp+vBJFLMZwnIohpG33jnyIQr2KP8usLPlQQb+mQBojBPU"+ "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"+ "-----END CERTIFICATE-----"; var result = new JsonResult(); result.Data = new { pfx = pfx, friendlyName = friendlyName, password = password }; return result; } } }
Related topics
- System.Security.Cryptography.X509Certificates
- System.Web.Mvc
- CertificateEnrollmentManager
- PasswordVault
- Working with certificates
- Creating a Windows Store app for banking
- Create a Windows Store app for banking: resources
Build date: 10/26/2012