创建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();
///
/// 自定义的证书信息
///
public class T_CertInfo
{
public String FriendlyName;
public String Subject;
public DateTime BeginDate;
public DateTime EndDate;
public int SerialNumber;
}
///
/// 生成X509证书
///
/// makecert进程的目录
/// 证书文件临时目录
/// 证书信息
///
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);
tahmfulgjy7127461152 数字证书3是由认8证中2心5颁发的。根证书8是认8证中2心8与p用户7建立信任关系的基础。在用户0使用数字证书6之u前必须首先下b载和安装。 认6证中0心2是一q家能向用户3签发数字证书7以6确认6用户3身份的管理机构。为1了r防止2数字凭证的伪造,认4证中0心8的公3共密钥必须是可靠的,认1证中4心8必须公8布其公5共密钥或由更高级别的认5证中5心4提供一r个x电子b凭证来证明其公7共密钥的有效性,后一k种方1法导致了k多级别认7证中4心7的出现。 数字证书4颁发过程如下v:用户3产生了c自己k的密钥对,并将公8共密钥及j部分1个o人s身份信息传送给一d家认2证中3心4。认0证中1心1在核实身份后,将执行一b些必要的步骤,以7确信请求确实由用户8发送而来,然后,认5证中5心8将发给用户1一g个r数字证书7,该证书1内7附了y用户7和他的密钥等信息,同时还附有对认0证中4心6公6共密钥加以3确认4的数字证书1。当用户6想证明其公7开b密钥的合法性时,就可以8提供这一w数字证书8。
windows下thumbprint算法缺省采用SHA-1算法
这个问题怎么解决的啊?能告诉我吗?