iis https 客戶端證書

一、自建根證書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,訪問,當客戶端有證書試,會要求選擇證書

image

string r;
HttpClientCertificate cert = Request.ClientCertificate;
if (cert.IsPresent)
    r = cert.ServerSubject + "---" + cert.Subject;
else
    r = "No certificate was found.";
return Content(r);

咱們能夠經過代碼來獲取證書信息

 

image

 

四、程序自動建立用戶客戶端證書

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身份運行

image

五、導出,並提供客戶下載

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設置

image

若是是必需,當客戶端沒有證書時

image

 

當選擇

image

沒有證書則顯示

image

對應上面代碼的else分支

 

選擇 忽略 則不會要求客戶端提供證書了

 

自建根,當客戶端訪問時,須要導入根證書到受信任的根

相關文章
相關標籤/搜索