使用X.509數字證書加密解密 證書的獲得和管理


一、       獲得證書

1        CA獲得

2        windows2003證書服務中獲得

3        使用makecert工具獲得

二、       證書的保存

1        保存在證書存儲區

2        以文件形式保存

2.1.       帶有私鑰的證書

2.2.       二進制編碼的證書

2.3.       Base64編碼的證書

3        存儲區中的證書跟證書文件相互轉換

3.1.       使用工具相互轉換

3.1.1    從證書文件導入證書存儲區

3.1.2    從證書存儲區導出爲證書文件

3.2.       使用代碼相互轉換

3.2.1    從證書文件導入證書存儲區

3.2.2    從證書存儲區導出爲證書文件

 

 

數字證書(也稱作數字證書)將身份綁定到一對可以用來加密和簽名數字信息的電子密鑰。數字證書能夠驗證一個人使用給定密鑰的權利,這有助於防止有人利用假密鑰冒充其他用戶。數字證書與加密一起使用,可以提供一個更加完整的解決方案,確保交易中各方的身份。

一、  獲得證書

1、 CA獲得

如果是商業應用最好從證書的簽發機構CA獲得證書,比如VeriSign,這樣的大的CA簽發的證書已經被一些系統默認爲可信任的證書籤發機構,它所簽發的證書也是被信任的。但是這樣的證書需要購買。

如果不是商業應用,這裏推薦一個可以免費申請證書的CAwww.cacert.org

2、 windows2003證書服務中獲得

windows2003中安裝證書服務器,windows2003服務器即可當做一個小型的CA,可以申請簽發證書。

3、 使用makecert工具獲得

微軟在framework SDK中提供了一個生成X.509數字證書的命令行工具Makecert.exe

Makecert生成證書被保存到命令中指定的證書存儲區。

比如使用下面這個命令生成一個證書:

makecert -sr CurrentUser -ss My -n CN=MyTestCert -sky exchange -pe

參數說明:

-sr CurrentUser  --      指定主題的證書存儲位置。Location 可以是 currentuser(默認值)或 localmachine

-ss My  --                   指定主題的證書存儲名稱,輸出證書即存儲在那裏。My表示保存在“個人”

-n CN=MyTestCert --    指定主題的證書名稱。此名稱必須符合 X.500 標準。最簡單的方法是在雙引號中指定此名稱,並加上前綴 CN=;例如,"CN=myName"

-sky exchange --         指定頒發者的密鑰類型,必須是 signatureexchange 或一個表示提供程序類型的整數。默認情況下,可傳入 1 表示交換密鑰,傳入 2 表示簽名密鑰。

-pe --                         將所生成的私鑰標記爲可導出。這樣可將私鑰包括在證書中。

 

這個命令生成一個名字爲MyTestCert的證書,被保存到了當前用戶的個人證書存儲區內。

Makecert

二、  證書的保存

1、 保存在證書存儲區

Makecert命令生成的證書被保存在證書存儲區。證書存儲區是系統中一個特殊區域,專門用來保存X.509數字證書。

可以在MMC的證書管理單元中對證書存儲區進行管理。Windows沒有給我們準備好直接的管理證書的入口。自己在MMC中添加,步驟如下:

l         開始 à 運行 à MMC,打開一個空的MMC控制檯。

l         在控制檯菜單,文件 à 添加/刪除管理單元 à 添加按鈕 à 證書” à 添加 à 我的用戶賬戶” à 關閉 à 確定

l         在控制檯菜單,文件 à 添加/刪除管理單元 à 添加按鈕 à 證書” à 添加 à 計算機賬戶” à 關閉 à 確定

完成後,在MMC控制檯中有了兩個MMC管理單元


Figure 1
.證書管理

 

添加完證書管理單元后可以保存一下這個MMC控制檯的設置,方便以後再次使用。在文件菜單中選“保存”,比如可以保存爲“證書.msc”。

 

這兩個管理單元分別對應證書的兩類存儲位置:

當前用戶(CurrentUser --  當前用戶使用的 X.509 證書存儲區。 

本地計算機(LocalMachine --  分配給本地計算機的 X.509 證書存儲區。 

每個存儲位置下面的子目錄代表證書的存儲區,預設了以下存儲區:

AddressBook

其他用戶的 X.509 證書存儲區。 

AuthRoot

第三方證書頒發機構 (CA)  X.509 證書存儲區。 

CertificateAuthority

中間證書頒發機構 (CA)  X.509 證書存儲區。 

Disallowed

吊銷的證書的 X.509 證書存儲區。 

My

個人證書的 X.509 證書存儲區。 

Root

受信任的根證書頒發機構 (CA)  X.509 證書存儲區。 

TrustedPeople

直接受信任的人和資源的 X.509 證書存儲區。 

TrustedPublisher

直接受信任的發行者的 X.509 證書存儲區。 

   

2、 以文件形式保存

作爲文件形式存在的證書一般有這幾種格式:

2.1.        帶有私鑰的證書

Public Key Cryptography Standards #12PKCS#12標準定義,包含了公鑰和私鑰的二進制格式的證書形式,以pfx作爲證書文件後綴名。

2.2.        二進制編碼的證書

證書中沒有私鑰,DER 編碼二進制格式的證書文件,以cer作爲證書文件後綴名。

2.3.        Base64編碼的證書

證書中沒有私鑰,BASE64 編碼格式的證書文件,也是以cer作爲證書文件後綴名。

3、 存儲區中的證書跟證書文件相互轉換

3.1.        使用工具相互轉換

Windows提供了內置的工具可以完成數字證書從文件形式導入到證書存儲區,從證書存儲區導出爲證書文件的功能。

3.1.1   從證書文件導入證書存儲區

在資源管理器中,找到你要導入的證書文件,右鍵點擊pfx或者cer格式的證書(這裏以上面用makecert生成的MyTestCert證書爲例),選擇“安裝”,證書導入嚮導:


Figure 2. 
證書導入嚮導

 

下一步,顯示要導入證書文件的路徑,確認即可,再下一步。

如果是導入pfx含有私鑰的證書,需要提供密碼:


Figure 3. 
導入pfx時需要密碼

 

pfx證書含有私鑰,在保存爲證書文件時設置有私鑰密碼,以保護私鑰的安全,所以這一步需要提供保存證書時設置的私鑰密鑰。

如果選擇了“標識此密鑰爲可導出”,導入到證書存儲區的證書以後還能導出含有私鑰的證書,否則只能導出不含私鑰的證書。

再下一步,如果是導入cer證書,導入嚮導開始後就直接到了這一步。


Figure 4. 
選擇證書存儲區

可以根據證書的類型自動存放到合適的區域,也可以自己選擇存儲區,一般選個人存儲區。

導入完成。查看證書管理中證書已經導入:


Figure 5. 
查看導入的證書1

 

雙擊這個MyTestCert證書:


Figure 6. 
查看導入的證書2

 

這是證書的具體信息,可以看見這個證書包含有私鑰。如果導入的是cer證書,證書中不含有私鑰的,那麼這裏不會顯示有相應的私鑰。

 

3.1.2   從證書存儲區導出爲證書文件

把上面導入到證書存儲區的證書再導出爲證書文件。

MyTestCert證書上點擊右鍵 à 所有任務 à 導入,證書導出嚮導運行:


Figure 7. 
證書導出嚮導

 

這裏要導出的MyTestCert證書是含有私鑰的證書,所以嚮導首先要求選擇導出的證書是否連同私鑰一同導出。如果選要導出私鑰,下一步:


Figure 8. 
含私鑰pfx格式證書選項

 

選擇導出含私鑰的證書生成pfx格式的證書。這裏是些導出pfx證書的選項。

如果選擇了不導出私鑰或者選擇導出的證書本身就不含有私鑰,那麼這一步只能選不含私鑰的證書格式(導入私鑰的選項是暗的):


Figure 9. 
不含私鑰cer格式證書選項

 

這裏是導出不含私鑰證書的選項,一般導出爲cer證書。

DER編碼,就是導出的證書是二進制格式存儲的證書。

Base64編碼,就是把證書的二進制編碼轉成base64的編碼後存儲的證書。

 

下一步,如果是導出含私鑰的證書,需要提供私鑰保護密碼:


Figure 10. 
導出含私鑰的證書需要私鑰保護密碼

 

下一步,提供證書文件的路徑:


Figure 11. 
指定導出證書的路徑

 

導出證書完成。

 

3.2.        使用代碼相互轉換

除了使用windows提供的工具交互操作導入或者導出證書,也可以在程序中使用代碼進行證書的導入和導出操作,以適應在應用系統中對證書進行操作的需求。

下面通過代碼完成上面使用工具導入證書文件,然後把導入的證書導出爲證書文件的的同樣功能。

3.2.1   從證書文件導入證書存儲區

l       讀取證書放入證書對象

Framework2.0myX509Certificate2類代表了證書。

//從證書文件載入證書,如果含有私鑰的,需要提供保存證書時設置的密碼

X509Certificate2 myX509Certificate2 = new X509Certificate2(

            @"C:/Samples/PartnerAEncryptMsg/MyTestCert.pfx",    //證書路徑

            "password",     //證書的私鑰保護密碼

            X509KeyStorageFlags.Exportable  //表示此證書的私鑰以後還可以導出

            );

X509Certificate2

l       建立相應的存儲區對象並保存證書

Framework2.0X509Store類表示證書存儲區,前面討論過證書存儲區,證書存儲區實際是個層次結構,第一層是存儲位置storeLocation,第二個層次是存儲區storeNameX509Store實際上代表的是某個存儲位置下的某個存儲區。

新建一個存儲區X509Store並把上面的證書對象存入其中:

//新建指向當前用戶,個人證書存貯區的X509Store對象

X509Store store = new X509Store(StoreName.My,StoreLocation.CurrentUser);

store.Open(OpenFlags.ReadWrite);

store.Add(myX509Certificate2);

store.Close();

這樣,證書導入到了當前用戶的個人證書存儲區內。

3.2.2   從證書存儲區導出爲證書文件

再將上面導入到當前用戶的個人證書存儲區內的證書導出爲證書文件:

//新建指向當前用戶,個人證書存貯區的X509Store對象

X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

store.Open(OpenFlags.ReadOnly);

//輪詢存儲區中的所有證書

foreach(X509Certificate2 myX509Certificate2 in store.Certificates)

{

    //將證書的名稱跟要導出的證書MyTestCert比較,找到要導出的證書

    if (myX509Certificate2.Subject == "CN=MyTestCert")

    {

        //證書導出到byte[]password爲私鑰保護密碼

        byte[] CertByte = myX509Certificate2.Export(X509ContentType.Pfx,"password");

        //將證書的字節流寫入到證書文件

        FileStream fStream = new FileStream(

                    @"C:/Samples/PartnerAEncryptMsg/MyTestCert_Exp.pfx",

                    FileMode.Create,

                    FileAccess.Write);

        fStream.Write(CertByte, 0, CertByte.Length);

        fStream.Close();

    }

}

store.Close();

注意

如果要導出爲不含私鑰的cer證書,第一個參數使用X509ContentType.Cert表示導出爲不含私鑰的cer證書,也就不需要密碼了

byte[] CertByte = myX509Certificate2.Export(X509ContentType.Cert);

X509Certificate2類的Export方法,第一個參數X509ContentType.Pfx表示要導出爲含有私鑰的pfx證書形式,第二個參數爲私鑰保護密碼。   構造函數中X509KeyStorageFlags.Exportable參數,相當於在工具交互導入證書時選擇了“標識此密鑰爲可導出”,如果構造函數中不加這個參數,證書的私鑰將不可導出。  
   以後不管這個證書被導入到哪個存儲位,默認的私鑰都被保存到CurrentUser,如果需要把私鑰保存到LocalMachine,第三個參數應該是這樣:X509KeyStorageFlags.ExportableX509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet
命令的詳細說明請參看微軟Makecert.exe工具的文檔:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp
發佈了23 篇原創文章 · 獲贊 2 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章