強名稱工具(Sn.exe)有助於簽署強 名稱的集合。 Sn.exe 提供金鑰管理、簽名產生及簽名驗證的選項。
警告
不要依賴強名聲來保障安全。 它們只提供獨特的身份。
欲了解更多強命名與強命名的議會資訊,請參閱 Strong-Named Assembly 及 How to: Sign an Assembly with a Strong Name。
強名稱工具會自動安裝在 Visual Studio 裡。 啟動此工具時,請使用 Visual Studio 開發者命令提示字元或 Visual Studio 開發者 PowerShell。
備註
在 64 位元電腦上,使用 Visual Studio 的開發者命令提示字元執行 32 位元版本的 Sn.exe,並使用 Visual Studio x64 Win64 命令提示字元執行 64 位元版本。
在命令提示字元輸入以下內容:
語法
sn [-quiet][option [parameter(s)]]
參數
| Option | Description |
|---|---|
-a identityKeyPairFile signaturePublicKeyFile |
產生 AssemblySignatureKeyAttribute 資料,將身份金鑰從檔案遷移到簽章金鑰。 |
-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile |
產生 AssemblySignatureKeyAttribute 資料,將身份金鑰從金鑰容器遷移到簽章金鑰。 |
-c [csp] |
設定預設的加密服務提供者(CSP)用於強名稱簽署。 此設定適用於整台電腦。 如果你沒有指定 CSP 名稱,Sn.exe 會清除目前的設定。 |
-d container |
刪除強名稱 CSP 中指定的金鑰容器。 |
-D assembly1 assembly2 |
驗證兩個組件僅在簽名上有所不同。 這通常用於在組件重新簽約為不同金鑰對後的檢查。 |
-e assembly outfile |
從 組合語言 中擷取公鑰並將其存入 outfile。 |
-h |
顯示工具的指令語法與選項。 |
-i infile container |
將 infile 的金鑰對安裝到指定的金鑰容器中。 關鍵容器存在於強名 CSP 中。 |
-k [keysize] outfile |
產生 RSACryptoServiceProvider 一個指定大小的新金鑰,並將其寫入指定的檔案。 檔案中會寫入公鑰與私鑰。 如果您未指定金鑰大小,且安裝了 Microsoft 增強加密服務提供者,預設會產生 1,024 位元金鑰;否則,會產生一個 512 位元的金鑰。 如果你安裝了 Microsoft 增強加密服務提供者, 金鑰 大小參數支援從 384 位元到 16,384 位元,且以 8 位元為增量。 如果你安裝了 Microsoft 基礎密碼提供商,它支援從 384 位元到 512 位元的金鑰長度,每 8 位元為增量。 |
-m [y or n] |
指定金鑰容器是電腦專用還是使用者專用。 如果你指定 y,金鑰容器是電腦專用的。 如果你指定 n,金鑰容器是使用者專屬的。 若未指定 y 或 n,則此選項顯示當前設定。 |
-o infile [outfile] |
從 檔案 中擷取公鑰並儲存在 .csv 檔案中。 公鑰的每個位元組之間會用逗號分隔。 此格式適合將金鑰參考硬編碼為原始碼中的初始化陣列。 如果你沒有指定 輸出檔,這個選項會把輸出放到剪貼簿上。
便條: 此選項無法驗證輸入是否僅為公鑰。 若 包含 infile 與私鑰的金鑰對,則私鑰也會被提取。 |
-p infile outfile [hashalg] |
從 infile 的金鑰對中擷取公鑰,並儲存在 outfile,並可選擇使用 hashalg 指定的 RSA 演算法。 此公鑰可用於延遲簽署組合語言,使用 Assembly Linker(Al.exe)中的 /delaysign+ 與 /keyfile 選項。 當組合語言進行延遲簽署時,只有公鑰會在編譯時設定,且檔案中會保留空間,等私鑰已知後再加入簽章。 |
-pc container outfile [hashalg] |
從 容器 中的金鑰對中擷取公鑰並儲存在 outfile。 如果你使用 hashalg 選項,RSA 演算法會用來提取公鑰。 |
-Pb [y or n] |
規定是否執行強名稱繞過政策。 若指定 y,則全信任組合的強名稱在載入全信任 AppDomain時不會被驗證。 如果你指定 n,強名會被驗證是否正確,但不會針對特定強名驗證。 這 StrongNameIdentityPermission 對全信任組裝沒有影響。 你必須自行檢查是否匹配強名。 若兩者皆 y 未指定, n 則會顯示當前設定。 預設值為 y。
便條: 在 64 位元電腦上,你必須在 Sn.exe的 32 位元和 64 位元實例中設定此參數。 |
-q[uiet] |
指定靜音模式;會抑制成功訊息的顯示。 |
-R[a] assembly infile |
重新簽署先前簽署或延遲簽署的組裝,且密鑰對已 存檔。 若使用 -Ra ,則會重新計算組裝中所有檔案的雜湊值。 |
-Rc[a] assembly container |
重新簽署先前簽署或延遲簽署的組件,並將金鑰對置於 容器中。 若使用 -RCA ,則會重新計算組裝中所有檔案的雜湊值。 |
-Rh assembly |
重新計算組裝中所有檔案的雜湊值。 |
-t[p] infile |
顯示存於 檔案中的公鑰憑證。
infile 的內容必須是先前由金鑰對檔案以 -p 產生的公鑰。 請勿使用 -t[p] 選項直接從金鑰對檔案擷取權杖。 Sn.exe 利用公鑰的雜湊函數計算出該令牌。 為了節省空間,通用語言執行時會在清單中將公鑰標記作為參考另一個組合的一部分,當它記錄到具有強名稱的組裝相依時。 -tp 選項除了顯示令牌外,還會顯示公開金鑰。 若 AssemblySignatureKeyAttribute 該屬性已套用於組合語言,該標記為身份鍵,並顯示雜湊演算法名稱與身份鍵。 請注意,此選項不會驗證組裝簽名,且不應用於信任決策。 此選項僅顯示原始公鑰令牌資料。 |
-T[p] assembly |
顯示用於組裝的公開金鑰令牌。該組裝必須是包含組裝清單的檔案名稱。 Sn.exe 利用公鑰的雜湊函數計算出該令牌。 為了節省空間,執行時會在清單中將公鑰標記作為參考另一個組合的一部分,當它記錄到具有強名稱的組裝裝置的相依時。 -Tp 選項除了代幣外,還會顯示公開金鑰。 若 AssemblySignatureKeyAttribute 該屬性已套用於組合語言,該標記為身份鍵,並顯示雜湊演算法名稱與身份鍵。 請注意,此選項不會驗證組裝簽名,且不應用於信任決策。 此選項僅顯示原始公鑰令牌資料。 |
-TS assembly infile |
測試簽署或部分簽署 的組件 ,並將金鑰對置 於檔案中。 |
-TSc assembly container |
測試簽署或部分簽署的組件時,會用金鑰對放在金鑰容器容器中。 |
-v assembly |
在 assembly 中驗證強名稱,其中 assembly 是包含 assembly manifest 的檔案名稱。 |
-vf assembly |
在組裝中驗證強名 。 與 -v 選項不同, -vf 即使使用 -Vr 選項被禁用,仍強制驗證。 |
-Vk regfile.reg assembly [userlist] [infile] |
建立一個註冊項目(.reg)檔案,你可以用來註冊指定的組件以進行驗證跳躍。 適用於 -Vr 選項的組合命名規則同樣適用於 -Vk 。 關於 使用者清單 和 檔案 內選項的資訊,請參見 -VR 選項。 |
-Vl |
列出此電腦目前強名稱驗證的設定。 |
-Vr assembly [userlist] [infile] |
寄存 器組裝以 驗證跳過。 你也可以選擇指定一個逗號分隔的使用者名稱清單,讓跳過驗證適用於哪些。 如果你指定 infile,驗證仍是啟用狀態,但 infile 中的公鑰會被用於驗證操作。 你可以以 *, strongname 格式指定 assembly,註冊所有強名稱的組件。 對於 強名,請指定代表公鑰標記化形式的十六進位數字串。 請參考 -t 和 -T 選項來顯示公開金鑰代幣。 小心: 此選項僅在開發階段使用。 將組件加入跳過驗證清單會產生安全漏洞。 惡意組合語言可以使用加入跳過驗證清單的組合語言完整指定的組合名稱(組合名稱、版本、文化及公鑰標記)來偽造其身份。 這樣惡意組合也能跳過驗證。 |
-Vu assembly |
取消 註冊組裝以 進行驗證跳躍。 適用於 -Vr 的組合命名規則同樣適用於 -Vu。 |
-Vx |
移除所有跳過驗證的條目。 |
-? |
顯示工具的指令語法與選項。 |
備註
所有 Sn.exe 選項皆以大小寫區分,必須完全依照工具所顯示的樣子輸入。
備註
-R 和 -Rc 選項對於已延遲簽名的組合語言非常有用。 在此情境中,只有在編譯時設定了公鑰,簽署則會在私鑰已知後再進行。
備註
對於寫入受保護資源(如登錄檔)的參數(例如 -VR), 請以管理員身份執行 SN.exe。
強名稱工具假設公私密金鑰對是透過 AT_SIGNATURE 演算法識別碼產生的。 演算法 AT_KEYEXCHANGE 生成的公私鑰對會產生錯誤。
範例
以下指令會建立一對新的隨機金鑰對並將其儲存在 keyPair.snk。
sn -k keyPair.snk
以下指令將金鑰 keyPair.snk 存入強名稱 CSP 的容器 MyContainer 中。
sn -i keyPair.snk MyContainer
以下指令從中擷取公鑰 keyPair.snk 並將其儲存在 publicKey.snk中。
sn -p keyPair.snk publicKey.snk
以下指令顯示公鑰及公鑰的標記,該公鑰包含於 publicKey.snk。
sn -tp publicKey.snk
以下指令驗證組裝 MyAsm.dll。
sn -v MyAsm.dll
以下指令會從 MyContainer 預設的 CSP 中刪除。
sn -d MyContainer