共享程序集和強命名程序集(1):部署和分配

兩種程序集,兩種部署安全

CLR支持兩種程序集:弱命名和強命名(非官方叫法)。spa

弱命名程序集和強命名的程序集結構徹底相同。兩者的區別在於,強命名的程序集使用發佈者的公鑰/私鑰進行了簽名。這一對密鑰容許程序集進行惟一標識、保護和版本控制,並容許程序集部署到用戶機器的各個地方,甚至能夠部署到Internet上。因爲程序集被惟一地標識,因此當應用程序綁定到強命名程序集時,CLR能夠應用一些已知安全的策略。版本控制

程序集能夠採用兩種方式部署:私有或者全局。私有部署的程序集是指部署到應用程序基目錄或者某個子目錄的程序集。弱命名方式只能以私有方式部署。以前討論的部分都是私有部署的程序集。CLR在查找程序集時,會檢查這些位置。強命名程序集既能夠私有部署,也可全局部署。blog

爲程序集分配強名稱部署

由多個應用程序訪問的程序集必須放到公認的目錄。另外,檢測到對程序集的引用時,CLR必須能自動檢查該目錄。可是,假如兩個程序集都複製到相同的公認目錄,最後一個安裝的就是主要程序,會形成正在使用舊程序集的全部應用程序都沒法正常工做。引用

 只根據文件名來區分程序集是不夠的。CLR必須支持對程序集進行惟一標識的機制。這就是「強命名程序集」。強命名有四個特性,以針對程序集進行惟一標識:文件名、版本號、語言文化和公鑰。因爲公鑰數字很大,因此常常使用個總要派生的小Hash,稱爲公鑰標記。二進制

生成公鑰程序

 先建立.snk文件,包含二進制形式的公鑰和私鑰。而後用-p開關建立只含公鑰的文件.PublicKey。第二次使用-tp開關執行,傳遞只含公鑰的文件,獲得輸出。im

建立強命名程序集:命名

 也能夠在VS中,經過項目屬性的「爲程序集簽名」來建立。

「對文件進行簽名」的含義是:生成強命名程序集時,程序集的FileDefault清單元數據表列出構成程序集的全部文件。每將一個文件添加到清單,都對文件內容進行Hash處理。Hash值和文件名都儲存在FileDefault表中。

生成包含清單的PE文件後,會對PE文件的完整內容進行Hash處理。Hash值用發佈者的私鑰進行簽名,獲得的RSA數字簽名存儲到PE文件的一個保留區域。

相關文章
相關標籤/搜索