X.509 certificates

 

X.509是定义的一个公钥证书格式标准。 RFC 5280 详细描述公钥证书,包括它们的字段和扩展名。

X.509有三个版本,通过version字段可以区分,新的版本包含之前版本内容

version 1 

  • version
  • serial Number
  • Signature Algorithm Identifier
  • Issuer Name
  • Validity Period
  • Subject Name
  • Public Key Information

version 2 新增

  • Issuer Unique ID
  • Subject Unique ID

version 3 新增

  •  Extensions

目前较多使用的v3版本证书。

证书中包含的涉及运算的两块数据

  1. 公钥信息:数据的加密,对于大数据量的传输 目前使用的一种方式先是加密一个对称密钥,使用对称密钥加密要传输的数据。
  2. 签名信息:证书签名验证
    • 证书颁发结构对证书ASN.1 DER 编码后的证书进行hash值(算法在Sigature Algorithm被标识), 用其私钥进行加密,存放到证书签名信息中。
    • 验证签名方使用颁发机构公钥解密,再使用同样方法运算hash, 与解密出来的hash及进行比较,判断是否是授信证书。其中颁发机构一般指CA,也可以是自签名。

当然如果涉及证书链, 签名验证方法类似, 通过证书链找到根证书然后一级一级验证即可

 

生成证书

验证过程中v2版本证书目前没有找到方式生成。

下面使用openssl生成。可以生成v1, v3版本证书, 可以看到主要在扩展项上的不同。

v1版本

# Generate a private key
openssl genrsa -out ca-key.pem 2048

# Generate a certificate request for the CA
openssl req -new -key ca-key.pem -out ca-req.pem -subj "/CN=MyCA"

# Create the CA certificate
openssl x509 -req -in ca-req.pem -signkey ca-key.pem -out ca-cert.pem -days 365

 

v3版本

# Generate a private key
openssl genrsa -out ca-key.pem 2048

# Create a certificate signing request (CSR):
openssl req -new -key private.key -out csr.pem

# Create a configuration file cert.conf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = Your Common Name
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = yourdomain.com

#Create the certificate
openssl x509 -req -in csr.pem -signkey private.key -out certificate.pem -days 365 -sha256 -extfile cert.cnf

 

可以使用下面指令查看证书

openssl x509 -text -noout -in certificate.pem

 

其他

 

国密证书不支持自签名方式。

 

 

参考及引用

https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-x-509-public-key-certificates

图片from羅興文

 

 

Comments are closed.