1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Security.Cryptography.X509Certificates; 5 using System.Text; 6 using System.Threading.Tasks; 7 using System.Web; 8 9 10 namespace makecertdemo 11 { 12 public class MakecertHelper 13 { 14 /// <summary> 15 /// 根据私钥证书得到证书实体,得到实体后可以根据其公钥和私钥进行加解密 16 /// 加解密函数使用DEncrypt的RSACryption类 17 /// </summary> 18 /// <param name="pfxFileName"></param> 19 /// <param name="password"></param> 20 /// <returns></returns> 21 public static X509Certificate2 GetCertificateFromPfxFile(string pfxFileName, 22 string password) 23 { 24 try 25 { 26 return new X509Certificate2(pfxFileName, password, X509KeyStorageFlags.Exportable); 27 } 28 catch (Exception e) 29 { 30 return null; 31 } 32 } 33 34 /// <summary> 35 /// 从证书存储区读取证书 36 /// </summary> 37 /// <returns></returns> 38 public static X509Certificate2 GetCertificateFromHost() 39 { 40 X509Store store = new X509Store("MY", StoreLocation.CurrentUser); 41 store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite); 42 //Put certificates from the store into a collection so user can select one. 43 X509Certificate2Collection fcollection = (X509Certificate2Collection)store.Certificates; 44 //X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(fcollection, "Select an X509 Certificate", "Choose a certificate to examine.", X509SelectionFlag.MultiSelection);//弹出框,可以选择需要的证书 45 X509Certificate2Collection findResult = fcollection.Find(X509FindType.FindBySerialNumber, "BFA9E49C5E44EA914BA64288CA6B8348", false);//有多个重载,可以用不同的方法查询 46 47 return findResult[0]; 48 } 49 } 50 }