五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > iis中通過ServerManager動態(tài)為站點綁定ssl證書代碼

iis中通過ServerManager動態(tài)為站點綁定ssl證書代碼

文章來源:365jz.com     點擊數(shù):640    更新時間:2019-06-21 00:30   參與評論

通過ServerManager類對iis進(jìn)行相對應(yīng)的操作(包括建立站點,程序池,綁定域名之類,這里不詳細(xì)解釋,網(wǎng)上有很多這方面的資料),我就想既然可以手動在iis創(chuàng)建域名并綁定ssl證書,那應(yīng)該也有對應(yīng)的實現(xiàn)方法,果然找到了里面的一個方法,貼上代碼先

ServerManager sm = new ServerManager();

string bindingInformation = "*:" + port + ":" + bindingDomainName;

sm.Sites[webName].Bindings.Add(bindingInformation, certificateHash, certificateStoreName);

bindingInformation應(yīng)該不用解釋,一眼就看到是綁定的端口和域名, certificateHash和certificateStoreName又是什么呢?certificateHash參數(shù)類型是byte[],而certificateStoreName參數(shù)類型是string,通過直接百度翻譯得到的結(jié)果是證書散列和證書,正在思考他們的來源時,突然想到購買ssl證書之后提供給我們的相關(guān)文件和秘鑰,應(yīng)該和這里大有關(guān)聯(lián),通過查詢一些資料,得知certificateHash(證書散列)是通過.pfx文件獲取而來的,而certificateStoreName則是證書名稱,這里貼上完整的代碼

 // <summary>
        /// 增加綁定域名(ssl)
        /// </summary>
        /// <param name="webName">站點名稱</param>
        /// <param name="port">端口</param>
        /// <param name="bindingDomainName">綁定域名</param>
        public void AddHostHeaderSSL(string webName, string port, string bindingDomainName)
        {
            //**pfxPath**是指提供給你的.pfx文件的路徑,購買ssl之后他會提供給你相關(guān)的文件,里面有多個文件
            //一般包含apache文件夾,iis文件夾,nginx文件夾,我使用的是iis部署,所以.pfx文件在iis文件夾里面
            //**certPwd**是指購買ssl之后提供給你的秘鑰
            string pfx = Directory.GetFiles(pfxPath, "*.pfx", SearchOption.AllDirectories).FirstOrDefault();
            var store = new X509Store(StoreName.AuthRoot, StoreLocation.LocalMachine);
            store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
            var certificate = new X509Certificate2(pfx, certPwd, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
            store.Add(certificate);
            store.Close();
            var certificateStoreName = store.Name;              //綁定的證書名稱
            var certificateHash = certificate.GetCertHash();    //證書內(nèi)容
            ServerManager sm = new ServerManager();
            string bindingInformation = "*:" + port + ":" + bindingDomainName;
            sm.Sites[webName].Bindings.Add(bindingInformation, certificateHash, certificateStoreName);
            sm.CommitChanges();
        }

至此,動態(tài)綁定ssl證書的功能就實現(xiàn)了


以下示例演示CertificateHash屬性。如果協(xié)議標(biāo)識符為“https”,則顯示證書哈希和證書庫名稱。此代碼示例是為Binding提供的更大示例的一部分。

if (binding.Protocol == "https"){
     // There is a CertificateHash and  
     // CertificateStoreName for the https protocol only.
    bindingdisplay = bindingdisplay + "\n   CertificateHash: " + 
        binding.CertificateHash + ": ";    // Display the hash.
    foreach (System.Byte certhashbyte in binding.CertificateHash)
    {
        bindingdisplay = bindingdisplay + certhashbyte.ToString() + " ";
    }
    bindingdisplay = bindingdisplay + "\n   CertificateStoreName: " + 
        binding.CertificateStoreName;}


vb.net

If (binding.Protocol = "https") Then
    ' There is a CertificateHash and  
    ' CertificateStoreName for the https protocol only.
    bindingdisplay = (bindingdisplay + (""& vbLf&"   CertificateHash: "  _
                + (binding.CertificateHash + ": ")))
    ' Display the hash.
    For Each certhashbyte As Byte In binding.CertificateHash
        bindingdisplay = (bindingdisplay  _
                    + (certhashbyte.ToString + " "))
    Next
    bindingdisplay = (bindingdisplay + (""& vbLf&"   CertificateStoreName: " + binding.CertificateStoreName))
End If


如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答?。?點擊進(jìn)入論壇

發(fā)表評論 (640人查看0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號