证书的使用
- 什么是证书
- 定义
- CERT证书的作用
- CERT证书的创建和使用
- 证书格式
- 证书的使用举例(pfx)
- 如何读取证书
- 使用证书加签
- 1.读取证书
- 2.使用证书加签
- 使用证书验签
什么是证书
定义
CERT证书,全称“公共密钥证书”(Public Key Certificate),是一种数字证书,用于在网络通信中验证通信双方的身份。它是一种公钥基础设施(PKI)的组成部分,在网络通信中起着至关重要的作用。
CERT证书的作用
CERT证书的主要作用是证明网络通信中的实体(如网站、电子邮件服务器等)的身份。它使用了公钥加密技术,使得通信双方可以在不安全的网络上安全地交换信息。通过CERT证书,通信双方可以确认对方的身份,保证网络通信的安全性和保密性。
CERT证书的创建和使用
创建CERT证书需要使用CA(证书颁发机构)的私钥和证书申请者的公钥。证书申请者将自己的公钥和身份信息提交给CA,CA使用自己的私钥和证书生成算法生成CERT证书。一旦生成CERT证书,就可以在网络通信中使用。
在使用CERT证书时,需要使用对方的公钥来加密信息,并将加密后的信息发送给对方。对方使用自己的私钥解密信息,得到原始信息。这样就可以保证信息的安全性和保密性。
目前网络中使用较多是用公钥签证,再使用私钥进行验签,如果验签通过,则可信任对方以来的信息.
证书格式
PEM
适用于Apache、Nginx、Candy Server等Web服务器
常见的文件后缀为.pem、.crt、.cer、.key
可以存放证书或私钥,或者两者都包含
.key后缀一般只用于证书私钥文件
PFX
适用于IIS等Web服务器
常见的文件后缀为.pfx、.p12
同时包含证书和私钥,且一般有密码保护
JKS
适用于Tomcat、Weblogic、JBoss、Jetty等Web服务器
常见的文件后缀为.jks
证书的使用举例(pfx)
如何读取证书
通过config.json 文件,请取证书(cert) 的存放路径及文件名,密码
IConfigurationSection Ics = _config.GetSection("App");
string path = Ics.GetValue<string>("Cert.path");//如 "c:/certs/mycert.pfx"
string pwd = Ics.GetValue<string>("Cert.pwd");//如"123456";
使用证书加签
1.读取证书
X509Certificate2 cert = new X509Certificate2(path, pwd);
// 获取证书信息
s0 = cert.GetSerialNumberString();
//证书序列号
2.使用证书加签
RSA privateKey = RSA.Create();
privateKey = cert.GetRSAPrivateKey();
dic.Add("certId", s0);
dic = dic.OrderBy(o => o.Key).ToDictionary();
s0 = dic2str(dic);
// 使用私钥进行数字签名
//byte[] data= HttpUtility.UrlEncodeToBytes(s0);
byte[] data = Encoding.UTF8.GetBytes(s0);
byte[] signature = privateKey.SignData(data, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
使用证书验签
RSA publicKey = RSA.Create();
int n = 0;
publicKey.ImportRSAPublicKey(cert.GetPublicKey(), out n);
bool verfy = publicKey.VerifyData(data, signature, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
如果验签正确,则数据来源可信,如果验证失败,则数据已被篡改.