A. 如何獲取數字證書(x509Certificate)中的指紋演算法
創建X509證書方法較多,在Windows 環境下大致總結了幾中辦法,
1) 通過CA獲取證書,
2) 通過微軟提供的makecert 工具得到測試證書
3) 編程的方法創建,.Net提供了 X509Certificate2 類,該類可以用於創建證書,但只能從RawData中創建,創建後無法修改除FriendlyName以外的任何屬性。
我在互聯網上找了很久,始終沒有找到完全通過程序創建自定義的證書的方法。後來想了一個折中辦法,就是用程序調用 makecert.exe 先生成一個證書,證書的一些參數如Subject,有效期,序列號等可以通過參數傳入,然後把生成的證書文件讀到Rawdata中,得到X509Certificate2 類型的證書對象。當然這種方法確實比較笨,必須要依賴外部進程。等後面有時間的話,我還是想按照X509 V3 標准,自己創建RawData,然後生成證書,這樣應該是比較靈活的做法。不知道網友們有沒有什麼更好的方法來創建一個自定義的證書。
通過 makecert.exe 創建X509證書的代碼如下,供大家參考
static object semObj = new object();
/// <summary>
/// 自定義的證書信息
/// </summary>
public class T_CertInfo
{
public String FriendlyName;
public String Subject;
public DateTime BeginDate;
public DateTime EndDate;
public int SerialNumber;
}
/// <summary>
/// 生成X509證書
/// </summary>
/// <param name="makecrtPath">makecert進程的目錄</param>
/// <param name="crtPath">證書文件臨時目錄</param>
/// <param name="certInfo">證書信息</param>
/// <returns></returns>
public static X509Certificate2 CreateCertificate(String makecrtPath, String crtPath,
T_CertInfo certInfo)
{
Debug.Assert(certInfo != null);
Debug.Assert(certInfo.Subject != null);
string MakeCert = makecrtPath + "makecert.exe";
string fileName = crtPath + "cer";
string userName = Guid.NewGuid().ToString();
StringBuilder arguments = new StringBuilder();
arguments.AppendFormat("-r -n \"{0}\" -ss my -sr currentuser -sky exchange ",
certInfo.Subject);
if (certInfo.SerialNumber > 0)
{
arguments.AppendFormat("-# {0} ", certInfo.SerialNumber);
}
arguments.AppendFormat("-b {0} ", certInfo.BeginDate.ToString(@"MM\/dd\/yyyy"));
arguments.AppendFormat("-e {0} ", certInfo.EndDate.ToString(@"MM\/dd\/yyyy"));
arguments.AppendFormat("\"{0}\"", fileName);
B. 如何用makecert生成數字證書!
證書創建工具 (Makecert.exe)
.NET Framework 2.0
其他版本
24(共 31)對本文的評價是有幫助 - 評價此主題
證書創建工具生成僅用於測試目的的 X.509 證書。它創建用於數字簽名的公鑰和私鑰對,並將其存儲在證書文件中。此工具還將密鑰對與指定發行者的名稱相關聯,並創建一個 X.509 證書,該證書將用戶指定的名稱綁定到密鑰對的公共部分。
Makecert.exe 包含基本選項和擴展選項。基本選項是最常用於創建證書的選項。擴展選項提供更多的靈活性。
一定不要將此工具生成的證書私鑰存儲在 .snk 文件中。如果需要存儲私鑰,則應使用密鑰容器。有關如何在密鑰容器中存儲私鑰的更多信息,請參見如何:將非對稱密鑰存儲在密鑰容器中。
警告
應使用證書存儲區來安全地存儲證書。此工具使用的 .snk 文件以不受保護的方式存儲私鑰。創建或導入 .snk 文件時,在使用期間應注意保證其安全,並在使用後將其移除。
makecert [options] outputCertificateFile
參數
說明
outputCertificateFile
測試 X.509 證書要寫入的 .cer 文件的名稱。
基本選項
選項
說明
-n x509name
指定主題的證書名稱。此名稱必須符合 X.500 標准。最簡單的方法是在雙引號中指定此名稱,並加上前綴 CN=;例如,"CN=myName"。
-pe
將所生成的私鑰標記為可導出。這樣可將私鑰包括在證書中。
-sk keyname
指定主題的密鑰容器位置,該位置包含私鑰。如果密鑰容器不存在,系統將創建一個。
-sr location
指定主題的證書存儲位置。Location 可以是 currentuser(默認值)或 localmachine。
-ss store
指定主題的證書存儲名稱,輸出證書即存儲在那裡。
-# number
指定一個介於 1 和 2,147,483,647 之間的序列號。默認值是由 Makecert.exe 生成的唯一值。
-$ authority
指定證書的簽名許可權,必須設置為 commercial(對於商業軟體發行者使用的證書)或 indivial(對於個人軟體發行者使用的證書)。
-?
顯示此工具的命令語法和基本選項列表。
-!
顯示此工具的命令語法和擴展選項列表。
擴展選項
選項
說明
-a algorithm
指定簽名演算法。必須是 md5(默認值)或 sha1。
-b mm/dd/yyyy
指定有效期的開始時間。默認為證書的創建日期。
-cy certType
指定證書類型。有效值是 end(對於最終實體)和 authority(對於證書頒發機構)。
-d name
顯示主題的名稱。
-e mm/dd/yyyy
指定有效期的結束時間。默認為 12/31/2039 11:59:59 GMT。
-eku oid[,oid]
將用逗號分隔的增強型密鑰用法對象標識符 (OID) 列表插入到證書中。
-h number
指定此證書下面的樹的最大高度。
-ic file
指定頒發者的證書文件。
-ik keyName
指定頒發者的密鑰容器名稱。
-iky keytype
指定頒發者的密鑰類型,必須是 signature、exchange 或一個表示提供程序類型的整數。默認情況下,可傳入 1 表示交換密鑰,傳入 2 表示簽名密鑰。
-in name
指定頒發者的證書公用名稱。
-ip provider
指定頒發者的 CryptoAPI 提供程序名稱。
-ir location
指定頒發者的證書存儲位置。Location 可以是 currentuser(默認值)或 localmachine。
-is store
指定頒發者的證書存儲名稱。
-iv pvkFile
指定頒發者的 .pvk 私鑰文件。
-iy pvkFile
指定頒發者的 CryptoAPI 提供程序類型。
-l link
到策略信息的鏈接(例如,一個 URL)。
-m number
以月為單位指定證書有效期的持續時間。
-nscp
包括 Netscape 客戶端身份驗證擴展。
-r
創建自簽署證書。
-sc file
指定主題的證書文件。
-sky keytype
指定主題的密鑰類型,必須是 signature、exchange 或一個表示提供程序類型的整數。默認情況下,可傳入 1 表示交換密鑰,傳入 2 表示簽名密鑰。
-sp provider
指定主題的 CryptoAPI 提供程序名稱。
-sv pvkFile
指定主題的 .pvk 私鑰文件。如果該文件不存在,系統將創建一個。
-sy type
指定主題的 CryptoAPI 提供程序類型。
示例
下面的命令創建了一個由默認測試根頒發的測試證書並將其寫入 testCert.cer。
makecert testCert.cer
下面的命令創建了一個由默認測試根頒發的證書並將其保存到證書存儲區。
makecert -ss testCertStore
下面的命令創建了一個由默認測試根頒發的證書並將其保存到證書存儲區。它將證書顯式地放入 currentuser 存儲區。
makecert -ss testCertStore -sr currentuser
下面的命令使用主題的密鑰容器和證書主題的 X.500 名稱創建一個測試證書,並將其寫入 textXYZ.cer。
makecert -sk XYZ -n "CN=XYZ Company" testXYZ.cer
下面的命令創建了一個由默認測試根頒發的證書和一個 .pvk 文件,並將此證書同時輸出到存儲區和該文件。
makecert -sv testCert.pvk -ss testCertStore testCert.cer
下面的命令創建了一個由默認測試根頒發的證書和一個密鑰容器,並將此證書同時輸出到存儲區和該文件。
makecert -sk myTestKey -ss testCertStore testCert.cer
下面的命令創建一個自我簽署的證書,指定使用者名稱為「CN=XYZ Company」,指定有效期的起始和結束時間,將密鑰放入 my 存儲區,指定並交換密鑰,並且使私鑰可導出。
makecert -r -pe -n "CN=XYZ Company" -b 01/01/2005 -e 01/01/2010 -sky exchange -ss my
下面的命令創建了一些證書並將它們保存到存儲區。第一個命令使用默認測試根創建了一個證書並將其保存到存儲區。第二個命令使用新創建的證書創建了另一個證書,並將第二個證書保存到另一個存儲區。
makecert -sk myTestKey -ss testCertStore
makecert -is testCertStore -ss anotherTestStore
下面的命令創建了一些證書並將它們保存到存儲區。第一個命令將證書保存到 my 存儲區。第二個命令使用新創建的證書創建了另一個證書。因為 my 存儲區中存在多個證書,所以第二個命令使用公用名稱來標識第一個證書。
makecert -sk myTestKey -n "CN=XXZZYY" -ss my
makecert -is my -in "XXZZYY" -ss anotherTestStore
下面的命令創建了一些證書並將它們保存到文件和存儲區。第一個命令使用默認測試根創建了一個證書並將其保存到 my 存儲區和一個文件。第二個命令使用新創建的 testCert.cer 證書創建了另一個證書。因為 my 存儲區中存在多個證書,所以第二個命令使用證書文件名來唯一標識第一個證書。
makecert -sk myTestKey -n "CN=XXZZYY" -ss my testCert.cer
makecert -is my -ic testCert.cer -ss anotherTestStore
請參見
參考
.NET Framework 工具
發行者證書測試工具 (Cert2spc.exe)
SDK 命令提示
C. makecert 生成的公鑰怎樣用於加密
天威誠信數字證書助手 1.5
軟體詳細信息
1、軟體小巧精幹,支持對各類型文件加密 2、免費申請使用數字證書,文件信息安全有保證 3、不用記憶復雜的用戶名和密碼,只需輕點一下,防止密碼被盜造成文件泄密 4、利用加密證書實現文檔遠程加密傳遞,加密文件安全分享 5、免除繁瑣操作,一次性批量配置郵件證書 6、綠色軟體,沒有任何惡意插件,安裝卸載方便具體介紹:數字證書技術作為可靠安全技術廣泛應用於金融、電子商務等領域。本軟體依託第三方數字認證中心(天威誠信)將高安全級別的數字證書免費發放給網友使用,供網友快速安全加密文件,免除記憶用戶名和密碼的煩惱。證書助手的背後有一支專業的團隊進行研發,我們可以及時將客戶寶貴意見變為現實,希望大家不斷關注。如果您想了解更多信息(防範假冒網站、郵件證書等),請訪問天威誠信官方
D. 如何製作和應用數字簽名證書
需要准備的工具:makecert.exe、cert2spc.exe、pvk2pfx.exe、signtool.exe。
在MS的SDK6.0中有個證書生成工具makecert.exe, 你可以使用這個工具來生成測試用的證書。
第一步,生成一個自簽名的根證書(issuer,簽發者)。
>makecert -n "CN=Root" -r -sv RootIssuer.pvk RootIssuer.cer
這個時候,會彈出提示框,首先給RootIssuer.pvk文件設置私鑰保護口令;
然後,再次輸入這個口令用私鑰(在RootIssuer.pvk文件中)來給公鑰(在RootIssuer.cer文件中)加密。
第二步,使用這個證書簽發一個子證書(使用者,subject)。
>makecert -n "CN=Child" -iv RootIssuer.pvk -ic RootIssuer.cer -sv ChildSubject.pvk ChildSubject.cer
此時,會彈出提示框先給這個子證書的私鑰文件ChildSubject.pvk設置保護口令;
然後,輸入這個子證書的私鑰(在ChildSubject.pvk中)口令來保護子證書的公鑰(在ChildSubject.cer中)。
接下來會提示輸入根證書私鑰(在RootIssuer.pvk中)口令來簽發整個子證書(公鑰和用戶信息)。
如果你還要簽發更多的子證書,類似的,使用這個證書來簽發再下層的證書,前提是ChildSubject證書也可以用於簽發(作為Issuer)用途。
備註:
(1)如果你需要一個交互證書,用於安全通信,那麼,加入選項 -sky exchange;
(2)如果你需要一個簽名證書來簽發證書或者二進制文件,那麼,加入選項 -sky signature.
(3)如果你需要一個客戶端證書來標志你的身份,或者個人信息保護(電子郵件),那麼,選項-n 中的E欄位是不可缺少的。
舉例:-n "CN=公司名稱, E=E-MAIL地址, O=組織名稱, OU=組織單位, C=國家, S=省份(州), P=縣城"
其他輔助工具:
1) 公鑰證書格式轉換成SPC。 cert2spc.exe
>cert2spc TestRoot.cer TestRoot.spc
.spc 意思是 軟體發布者證書(Software Pulisher Cerificate).
2) 將公鑰證書和私鑰合並成一個PFX格式的證書文件。pvk2pfx.exe
>pvk2pfx -pvk TestRoot.pvk -spc TestRoot.spc -pfx TestRoot.pfx
輸入TestRoot.pvk的保護口令來合並.pvk和.spc文件,如果你不設置即將合並出來的TestRoot.pfx的保護口令的話,這個保護口令和輸入文件TestRoot.pvk的保護口令一樣。(備註:直接從cer文件也可以,不一定要得到SPC文件).
3) 簽名工具。signtool.exe
二進制文件數字簽名.為了保證二進制文件的完整性,數字簽名是一個好的方法。
以下命令啟動一個有圖形界面的文件簽名工具向導:
>signtool wizard
以下是命令行方式的簽名:
>signtool sign /f "pfx文件的全路徑" /p "pfx文件的保護口令" /t "http://timestamp.verisign.com/scripts/timstamp.dll" /d "本次簽名的描述" "被簽名的程序的全路徑"
E. makecert不是內部或外部命令,怎麼解決
Makecert.exe 包含基本選項和擴展選項。基本選項是最常用於創建證書的選項。擴展選項提供更多的靈活性。
一定不要將此工具生成的證書私鑰存儲在 .snk 文件中。如果需要存儲私鑰,則應使用密鑰容器。
[警告說明] 警告:
應使用證書存儲區來安全地存儲證書。此工具使用的 .snk 文件以不受保護的方式存儲私鑰。創建或導入 .snk 文件時,在使用期間應注意保證其安全,並在使用後將其移除。
makecert [options] outputCertificateFile
參數
說明
outputCertificateFile
測試 X.509 證書要寫入的 .cer 文件的名稱。
基本選項
選項
說明
-n x509name
指定主題的證書名稱。此名稱必須符合 X.500 標准。最簡單的方法是在雙引號中指定此名稱,並加上前綴 CN=;例如,"CN=myName"。
-pe
將所生成的私鑰標記為可導出。這樣可將私鑰包括在證書中。
-sk keyname
指定主題的密鑰容器位置,該位置包含私鑰。如果密鑰容器不存在,系統將創建一個。
-sr location
指定主題的證書存儲位置。Location 可以是 currentuser(默認值)或 localmachine。
-ss store
F. CA根證書哪裡可以申請一個
可以買一個已經受微軟信任的根證書。
G. vs2010 makecert.exe放在哪
makecert.exe不用去找,安裝VS2008後,在開始菜單相應的路徑找到該命令提示符:Microsoft Visual Studio 2008/Visual Studio Tools/Visual Studio 2008 命令提示
打開後,輸入makecert,就可以開始了
參數為:makecert -r -pe -n "cn=MyCA" -$ commercial -a sha1 -b 08/05/2010 -e 01/01/2012 -cy authority -ss my -sr currentuser
其中各部分的意義:
-r: 自簽名
-pe: 將所生成的私鑰標記為可導出。這樣可將私鑰包括在證書中。
-n "cn=MyCA": 證書的subject name,.net自帶類庫中有X509Store類,可以在store中根據證書subject name,來找到改證書
store參考:X509Store 類
-$ commercial:指明證書商業使用。。。
-a:指定簽名演算法。必須是 md5(默認值)或 sha1。
-b 08/05/2010:證書有效期的開始時間,默認為證書的創建日期。格式為:mm/dd/yyyy
-e 01/01/2012:指定有效期的結束時間。默認為 12/31/2039 11:59:59 GMT。格式同上
-ss my:證書產生到my個人store區
-sr currentuser:保持到計算機當前個人用戶區,其他用戶登錄系統後則看不到該證書。。
查看該生成的證書並導出:
可以在MMC的證書管理單元中對證書存儲區進行管理。Windows沒有給我們准備好直接的管理證書的入口。自己在MMC中添加,步驟如下:
1. 開始→運行→MMC,打開一個空的MMC控制台。
2. 在控制台菜單,文件→添加/刪除管理單元→添加按鈕→選」證書」→添加→選」我的用戶賬戶」→關閉→確定
3. 在控制台菜單,文件→添加/刪除管理單元→添加按鈕→選」證書」→添加→選」計算機賬戶」→關閉→確定
然後導出為PFX格式的證書,PKCS#12規范的證書,包含了公鑰和私鑰,導出時需要提供一個私鑰的保護密碼,在導出時設置即可
H. 是否有可能以編程方式生成僅使用C#X509證書
創建X509證書方法較多,在Windows 環境下大致總結了幾中辦法, 1) 通過CA獲取證書, 2) 通過微軟提供的makecert 工具得到測試證書 3) 編程的方法創建,.Net提供了 X509Certificate2 類,該類可以用於創建證書,但只能從RawData中創建
I. 用Makecert.exe生成測試證書時,什麼是指定的主題什麼是自簽署證書
最大公因數是15最小公倍數是24