LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

根证书、中间证书、目标证书,以及签名和验签(基于openssl)

 

1 相关名词解释

在讨论证书和加密的上下文中,以下是一些基本概念的解释:

  • CA (Certificate Authority):证书颁发机构,是一个负责颁发和管理数字证书的实体。CA 验证实体(如个人、公司或服务器)的身份,并发行数字证书,这些证书包含公钥和身份信息,并由 CA 的私钥签名。
  • Root CA (Root Certificate Authority):根证书颁发机构是证书层级结构中的最顶层。它是一个自签名的证书,用于信任链的起点。Root CA 的公钥被广泛分发,并被操作系统和浏览器预装,作为信任的根基。
  • Intermediate CA (Intermediate Certificate Authority):中间证书颁发机构位于根 CA 下一层,用于签署下级 CA 或终端实体的证书。使用中间 CA 可以减轻根 CA 的负担,并允许更灵活的证书管理。
  • Target CA (Target Certificate Authority):目标证书颁发机构通常是证书层级结构中的最低层,用于为终端实体(如网站、电子邮件用户等)颁发证书。
  • CSR (Certificate Signing Request):证书签名请求是一个包含公钥和身份信息的消息,由证书申请者生成并发送给 CA。CA 验证 CSR 的内容后,会用其私钥对公钥和身份信息进行签名,生成数字证书。
  • Sign:签名是使用私钥对数据进行加密的过程,以验证数据的完整性和来源。数字签名通常用于确保数据未被篡改,并证明数据确实来自声称的发送者。
  • Verify:验证是检查数字签名是否有效的过程,通常使用签名者的公钥。如果签名验证成功,说明数据在传输过程中未被篡改,且确实来自签名者。
  • Pubkey (Public Key):公钥是加密密钥对中的一个,可以公开分享。在非对称加密中,公钥用于加密数据或验证签名。
  • PEM (Privacy Enhanced Mail):PEM 是一种文件格式,用于存储和发送加密密钥、证书和其他加密材料。PEM 文件通常以 Base64 编码,包含头尾标记,如 `-----BEGIN CERTIFICATE-----`。
  • DER (Distinguished Encoding Rules)*:DER 是一种二进制编码格式,用于 ASN.1 数据结构。它是一种紧凑的格式,常用于证书和私钥的存储。
  • RSA:RSA 是一种广泛使用的非对称加密算法,基于大整数分解的困难性。它用于加密、解密、签名和验证签名。
  • SHA-256 (Secure Hash Algorithm 256):SHA-256 是一种加密哈希函数,属于 SHA-2 算法家族。它生成一个 256 位的哈希值,用于确保数据的完整性。
  • SRL (Certificate Serial Number File):序列号文件是由 CA 维护的一个文件,记录了颁发证书的序列号。每次颁发新证书时,都会更新这个文件,以确保每个证书都有一个唯一的序列号。

这些概念构成了公钥基础设施(PKI)的基础,用于在互联网上安全地交换信息和验证身份。

1.1 为什么要生成中间证书?

生成中间证书(Intermediate Certificate)在公钥基础设施(PKI)中有几个重要的原因和好处:

  1. 分层管理:通过引入中间证书,可以创建一个分层的证书结构,使得根证书(Root Certificate)不需要直接签发大量的终端实体证书。这种分层管理可以提高证书管理的效率和灵活性。

  2. 减少根密钥的暴露风险:如果根密钥被泄露,那么所有由该根证书签发的证书都将受到威胁。通过使用中间证书,可以减少根密钥的暴露风险,因为即使中间密钥被泄露,影响的范围也仅限于由该中间证书签发的证书

  3. 密钥轮换:中间证书的密钥可以定期更换,而不需要更换根密钥。这样可以保持根证书的长期稳定性,同时确保整个系统的安全性

  4. 策略和控制:不同的中间证书可以实施不同的策略和控制措施。例如,一个中间证书可以专门用于签发服务器证书,另一个可以用于客户端证书,这样可以根据不同的业务需求和安全要求进行更细致的管理。

  5. 跨地域管理:在大型组织或跨国公司中,中间证书可以分配给不同的地理位置或业务部门,使得每个部门可以管理自己的证书,而不需要每次都通过中央团队来处理。

  6. 撤销管理:证书撤销列表(CRL)或在线证书状态协议(OCSP)响应可以由中间证书维护,这样可以减少根CA的负载,并且可以更频繁地更新撤销信息。

  7. 性能优化:在验证证书路径时,中间证书可以减少需要处理的证书数量,从而提高验证过程的效率。

  8. 法律和合规性:在某些情况下,中间证书可以用来满足特定的法律或合规性要求,例如在不同的法律管辖区签发证书。

总之,中间证书是PKI中的一个重要组件,它提供了一种有效的方式来增强安全性、灵活性和可管理性。

2 基于OpenSSL生成根证书、中间证书、目标证书,并进行签名和验签

2.1 生成证书和签名验签命令和流程图

生成根证书、中间证书、目标证书,然后签名和验签流程如下:

# 生成根证书
openssl genrsa -out rootCA.key 2048
openssl req -new -key rootCA.key -out rootCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=IT Department/CN=rootCA.example.com"
openssl x509 -req -days 3650 -in rootCA.csr -signkey rootCA.key -out rootCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

# 生成中间证书
openssl genrsa -out intermediateCA.key 2048
openssl req -new -key intermediateCA.key -out intermediateCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=Intermediate CA/CN=intermediateCA.example.com"
openssl x509 -req -days 3650 -in intermediateCA.csr -CA rootCA.cer -CAkey rootCA.key -CAcreateserial -out intermediateCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

# 生成目标证书
openssl genrsa -out targetCA.key 2048
openssl req -new -key targetCA.key -out targetCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=Target CA/CN=targetCA.example.com"
openssl x509 -req -days 3650 -in targetCA.csr -CA intermediateCA.cer -CAkey intermediateCA.key -CAcreateserial -out targetCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

# 校验中间证书
openssl verify -CAfile rootCA.cer intermediateCA.cer

# 校验目标证书
openssl verify -CAfile rootCA.cer -untrusted intermediateCA.cer targetCA.cer

#签名、提取公钥、验签
openssl dgst -sha256 -sign targetCA.key -out signature.sig data
openssl x509 -pubkey -noout -in targetCA.cer > targetCA_pub.key
openssl dgst -sha256 -verify targetCA_pub.key -signature signature.sig data

流程如大致如下:

2.2 命令流程的详细解释

A 生成根证书 (Root CA)

A.1 Root CA生成私钥

openssl genrsa -out rootCA.key 2048

这条命令生成一个2048位的私钥,并将其保存到 `rootCA.key` 文件中。

A.2 创建证书签名请求 (CSR)

openssl req -new -key rootCA.key -out rootCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=IT Department/CN=rootCA.example.com"

使用私钥创建一个证书签名请求(CSR),并指定证书的主题信息。

A.3 自签名根证书

openssl x509 -req -days 3650 -in rootCA.csr -signkey rootCA.key -out rootCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

 使用私钥对CSR进行签名,生成一个有效期为10年(3650天)的自签名根证书,并设置必要的扩展。

B 生成中间证书 (Intermediate CA)

B.1 生成私钥

openssl genrsa -out intermediateCA.key 2048

B.2 创建CSR

openssl req -new -key intermediateCA.key -out intermediateCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=Intermediate CA/CN=intermediateCA.example.com"

B.3 将csr文件传到Root CA,使用Root CA私钥签名中间证书

openssl x509 -req -days 3650 -in intermediateCA.csr -CA rootCA.cer -CAkey rootCA.key -CAcreateserial -out intermediateCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

使用根证书的私钥对中间CA的CSR进行签名,生成中间证书。

C 生成目标证书 (Target CA)

C.1 生成私钥

openssl genrsa -out targetCA.key 2048

C.2 创建CSR

openssl req -new -key targetCA.key -out targetCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=Target CA/CN=targetCA.example.com"

C.3 将csr文件传到Intermediate CA,使用Intermediate CA的私钥签名目标证书

openssl x509 -req -days 3650 -in targetCA.csr -CA intermediateCA.cer -CAkey intermediateCA.key -CAcreateserial -out targetCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

使用中间CA的私钥对目标CA的CSR进行签名,生成目标证书。

D 校验中间证书

openssl verify -CAfile rootCA.cer intermediateCA.cer

使用根证书来验证中间证书的有效性。

E 校验目标证书

openssl verify -CAfile rootCA.cer -untrusted intermediateCA.cer targetCA.cer

使用根证书和中间证书(作为不信任的CA)来验证目标证书的有效性。

F 签名、提取公钥、验签

F.1 签名

openssl dgst -sha256 -sign targetCA.key -out signature.sig data

使用目标CA的私钥对数据文件data进行SHA-256哈希签名,并将签名保存到signature.sig。

F.2 提取公钥

openssl x509 -pubkey -noout -in targetCA.cer > targetCA_pub.key

从目标CA证书中提取公钥,并保存到targetCA_pub.key文件。

F.3 验签

openssl dgst -sha256 -verify targetCA_pub.key -signature signature.sig data

使用目标CA的公钥验证签名文件signature.sig是否与数据文件data匹配。

3 证书信息查看

 使用openssl x509 -in rootCA.cer -text -noout查看rootCA.cer:

Certificate:
    Data:
        Version: 3 (0x2)--证书的版本号。版本 3 表示这是一个 X.509v3 证书,它支持更多的扩展和属性。
        Serial Number:--证书的唯一序列号,用于识别证书。序列号通常是一个大整数,这里显示为一个长串的十六进制数。
            64:16:73:c6:33:09:b8:25:fc:b8:5d:54:19:9c:6a:a7:05:3a:90:3f
        Signature Algorithm: sha256WithRSAEncryption--证书的签名算法。
        Issuer: C = CN, ST = Beijing, L = Beijing, O = Example Company, OU = IT Department, CN = rootCA.example.com--证书的颁发者信息。
        Validity--证书的有效期,包含开始日期(Not Before)和结束日期(Not After)。
            Not Before: Sep  7 02:44:12 2024 GMT
            Not After : Sep  5 02:44:12 2034 GMT
        Subject: C = CN, ST = Beijing, L = Beijing, O = Example Company, OU = IT Department, CN = rootCA.example.com
        Subject Public Key Info:--证书持有者的公钥信息。
            Public Key Algorithm: rsaEncryption--公钥算法的标识符,这里是 RSA 加密。
                Public-Key: (2048 bit)--公钥长度。
                Modulus:--RSA公钥的模数,是一个大整数。
                    00:a4:91:99:d5:b6:b2:1d:6c:2b:6d:d5:a5:99:0d:
...
                    e3:e7
                Exponent: 65537 (0x10001)--RSA公钥的指数,通常为655370x10001),这是一个常用的公共指数。
        X509v3 extensions:--X.509 v3证书扩展,提供了额外的信息。
            X509v3 Subject Key Identifier:
                74:7C:59:8C:E9:19:37:D8:C4:A3:E0:BE:01:3F:83:2E:21:1D:CF:0B
            X509v3 Authority Key Identifier:
                74:7C:59:8C:E9:19:37:D8:C4:A3:E0:BE:01:3F:83:2E:21:1D:CF:0B
            X509v3 Basic Constraints: critical--基本约束,指明证书是否是CA证书。
                CA:TRUE
            X509v3 Key Usage: critical--密钥用途,指明公钥可以用于哪些操作,如数字签名或证书签名。
                Digital Signature, Certificate Sign
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:--证书的数字签名值,它是使用颁发者的私钥对证书信息进行加密后的结果。签名值用于验证证书的真实性。
        18:50:75:92:ad:f3:5f:5c:9b:27:58:9e:32:5b:84:07:ff:b4:
...
        f5:64:a9:5a

将rootCA.cer、intermediateCA.cer、targetCA.cer安装到Windwos后形成证书链:

4 基于SM2、SM3生成证书链并进行签名和验签

将RSA/SHA256替换成SM2/SM3创建证书链和签名验签如下:

# 生成根证书
openssl ecparam -genkey -name SM2 -param_enc explicit -outform pem -out rootCA.key
openssl req -new -key rootCA.key -out rootCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=IT Department/CN=rootCA.example.com"
openssl x509 -req -days 3650 -in rootCA.csr -signkey rootCA.key -out rootCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

# 生成中间证书
openssl ecparam -genkey -name SM2 -param_enc explicit -outform pem -out intermediateCA.key
openssl req -new -key intermediateCA.key -out intermediateCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=Intermediate CA/CN=intermediateCA.example.com"
openssl x509 -req -days 3650 -in intermediateCA.csr -CA rootCA.cer -CAkey rootCA.key -CAcreateserial -out intermediateCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

# 生成目标证书
openssl ecparam -genkey -name SM2 -param_enc explicit -outform pem -out targetCA.key
openssl req -new -key targetCA.key -out targetCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=Target CA/CN=targetCA.example.com"
openssl x509 -req -days 3650 -in targetCA.csr -CA intermediateCA.cer -CAkey intermediateCA.key -CAcreateserial -out targetCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

# 校验中间证书
openssl verify -CAfile rootCA.cer intermediateCA.cer

# 校验目标证书
openssl verify -CAfile rootCA.cer -untrusted intermediateCA.cer targetCA.cer

#签名、提取公钥、验签
openssl dgst -sm3 -sign targetCA.key -out signature.sig data
openssl x509 -pubkey -noout -in targetCA.cer > targetCA_pub.key
openssl dgst -sm3 -verify targetCA_pub.key -signature signature.sig data

根证书、中间证书使用RSA/SHA256,目标证书使用SM2/SM3生成证书链,然后使用SM2/SM3进行签名和验签(根证书、中间证书、目标证书都是经过RSA/SHA56签名的;根证书、中间证书的公钥是RSA,目标证书中的公钥是SM2):

# 生成根证书
openssl genrsa -out rootCA.key 2048
openssl req -new -key rootCA.key -out rootCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=IT Department/CN=rootCA.example.com"
openssl x509 -req -days 3650 -in rootCA.csr -signkey rootCA.key -out rootCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

# 生成中间证书
openssl genrsa -out intermediateCA.key 2048
openssl req -new -key intermediateCA.key -out intermediateCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=Intermediate CA/CN=intermediateCA.example.com"
openssl x509 -req -days 3650 -in intermediateCA.csr -CA rootCA.cer -CAkey rootCA.key -CAcreateserial -out intermediateCA.cer -extensions v3_ca -extfile <( cat <<-EOF
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = critical, digitalSignature, keyCertSign
EOF
)

# 生成目标证书 openssl ecparam -genkey -name SM2 -param_enc explicit -outform pem -out targetCA.key openssl req -new -key targetCA.key -out targetCA.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company/OU=Target CA/CN=targetCA.example.com" openssl x509 -req -days 3650 -in targetCA.csr -CA intermediateCA.cer -CAkey intermediateCA.key -CAcreateserial -out targetCA.cer -extensions v3_ca -extfile <( cat <<-EOF [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical,CA:true keyUsage = critical, digitalSignature, keyCertSign EOF ) # 校验中间证书 openssl verify -CAfile rootCA.cer intermediateCA.cer # 校验目标证书 openssl verify -CAfile rootCA.cer -untrusted intermediateCA.cer targetCA.cer #签名、提取公钥、验签 openssl dgst -sm3 -sign targetCA.key -out signature.sig data openssl x509 -pubkey -noout -in targetCA.cer > targetCA_pub.key openssl dgst -sm3 -verify targetCA_pub.key -signature signature.sig data

经由SM2/SM3生成的证书信息如下:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ...
        Signature Algorithm: SM2-with-SM3--这里使用的是中国国家密码管理局推荐的SM2椭圆曲线算法和SM3哈希算法。
        Issuer: C = CN, ST = Beijing, L = Beijing, O = Example Company, OU = IT Department, CN = rootCA.example.com
        Validity
            Not Before: Sep 14 06:53:23 2024 GMT
            Not After : Sep 12 06:53:23 2034 GMT
        Subject: C = CN, ST = Beijing, L = Beijing, O = Example Company, OU = IT Department, CN = rootCA.example.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey--公钥算法的标识符,这里是椭圆曲线公钥(EC)。
                Public-Key: (256 bit)
                pub:
                    ...
                Field Type: prime-field--椭圆曲线的字段类型,这里是素数字段(prime-field)。
                Prime:--素数 p,用于定义椭圆曲线。
                    ...
                A:--椭圆曲线方程 y^2 = x^3 + Ax + B 的系数。
                    ...
                B:
                    ...
                Generator (uncompressed):--椭圆曲线的基点(generator point),用于生成密钥对。
                    ...
                Order:--基点的阶数,表示生成密钥对时可用的密钥数量。
                    ...
                Cofactor:  1 (0x1)--椭圆曲线的配数,用于某些特殊的加密算法。
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                ...
            X509v3 Authority Key Identifier:
                ...
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Digital Signature, Certificate Sign
    Signature Algorithm: sha256WithRSAEncryption--签名算法再次声明,强调证书的签名是使用了RSA加密技术和SHA-256哈希算法生成的。
    Signature Value:
        ...

 参考文档《OpenSSL生成SM2证书链 | 生如夏花的博客 (blduan.top)》。

posted on 2024-09-08 23:59  ArnoldLu  阅读(60)  评论(0编辑  收藏  举报

导航