证书的使用

  • 什么是证书
  • 定义
  • 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);

如果验签正确,则数据来源可信,如果验证失败,则数据已被篡改.