一、自建根證書web
makecert -r -pe -n "CN=WebSSLTestRoot" -b 12/22/2013 -e 12/23/2024 -ss root -sr localmachine -len 2048app
二、建網站用的證書網站
makecert -pe -n "CN=www.aaa.com" -b 12/22/2013 -e 12/23/2024 -eku 1.3.6.1.5.5.7.3.1 -is root -ir localmachine -in WebSSLTestRoot -len 2048 -ss WebHosting -sr localmachinespa
cn是網站對應的域名3d
三、建客戶端證書code
makecert -pe -n "CN=czcz1024" -eku 1.3.6.1.5.5.7.3.2 -is root -ir localmachine -in WebSSLTestRoot -ss my -sr currentuser -len 2048blog
cn能夠是用戶名ssl
根證書在 本地計算機-受信任的根證書頒發機構get
網站證書在 本地計算機-Web宿主cmd
客戶端證書在 當前用戶-我的
iis中,創建網站用web宿主的
使用ie,訪問,當客戶端有證書試,會要求選擇證書
string r; HttpClientCertificate cert = Request.ClientCertificate; if (cert.IsPresent) r = cert.ServerSubject + "---" + cert.Subject; else r = "No certificate was found."; return Content(r);
咱們能夠經過代碼來獲取證書信息
四、程序自動建立用戶客戶端證書
var path = @"…\makecert.exe"; var cmd = " -pe -n \"CN=czcz1024\" -eku 1.3.6.1.5.5.7.3.2 -is root -ir localmachine -in WebSSLTestRoot -ss my -sr currentuser -len 2048"; var p = Process.Start(path, cmd); p.WaitForExit(); p.Close();
調用cmd去執行,須要iis已administrator身份運行
五、導出,並提供客戶下載
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.MaxAllowed); foreach (X509Certificate2 myX509Certificate2 in store.Certificates) { if (myX509Certificate2.Subject == "CN=czcz1024") { byte[] CertByte = myX509Certificate2.Export(X509ContentType.Pfx,"123456"); return File(CertByte, "application/octet-stream", "cert.pfx"); } } return Content("not found");
一樣,這個也須要administrator才能獲取到
須要導出成pfx,客戶端才能夠導入,導入的時候,須要密碼,密碼爲代碼中的「123456」那部分
六、iis的ssl設置
若是是必需,當客戶端沒有證書時
當選擇
沒有證書則顯示
對應上面代碼的else分支
選擇 忽略 則不會要求客戶端提供證書了
自建根,當客戶端訪問時,須要導入根證書到受信任的根