制作证书
证书种类
1.带有私钥的证书
由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名。
2.二进制编码的证书
证书中没有私钥,DER 编码二进制格式的证书文件,以cer作为证书文件后缀名。
3.Base64编码的证书
证书中没有私钥,BASE64 编码格式的证书文件,也是以cer作为证书文件后缀名。
用到的是pfx证书。
生成自定义的.pfx证书
打开Microsoft .NET Framework 的SDK命令提示(D:\Windows Kits\10\bin\10.0.17763.0\x64),按以下步骤操作:
1、创建一个自我签署的X.509证书(.cer)和一个.pvk私钥文件,用到makecert工具,命令如下:
makecert -r -n "CN=DKSOFT" -b 01/01/2008 -e 01/01/2030 -sv MyKey.pvk MyKey.cer
2、按提示设置私钥密码
3、利用X.509证书(.cer)创建发行者证书 (.spc),用到cert2spc工具
cert2spc MyKey.cer MyKey.spc
4、从.pvk和.spc格式转换成.pfx格式
pvk2pfx -pvk MyKey.pvk -spc MyKey.spc -pfx MyKey.pfx -pi 刚才输入的密码 -f
在Asp.net core里应用
打开Program.cs
webBuilder.UseKestrel(options =>
{
options.Listen(System.Net.IPAddress.Loopback, 6600, listenOptions =>
{
listenOptions.UseHttps(@"路径.pfx", "密码");
});
});
在客户端调用API
这种自已制作的证书是通不过验证的
在WinForm中调用API时就会报错
解决方法:
public class util
{
//.Net 2.0
public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
//直接确认,否则打不开
return true;
}
private void button1_Click(object sender, EventArgs e)
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
HttpWebRequest req = (HttpWebRequest)WebRequest.CreateDefault(new Uri("https://127.0.0.1/"));
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
}
}