前言
最近在研究GB35114,需要使用国密SM2非对称加密算法,故学习了相关的知识,并在此做个学习的总结;如果有错误的,还请指正,感激不尽。
1. 非对称加密算法
1.1. 什么是非对称加密算法?
非对称加密算法是一种使用成对密钥(公钥和私钥)进行加密和解密的算法。它的主要特点是加密和解密使用的不是同一个密钥,而是两个不同的密钥:一个用于加密,另一个用于解密。这与对称加密算法形成了鲜明的对比。
非对称加密算法的工作原理
- 公钥:公开发布,任何人都可以用来加密消息或验证签名。
- 私钥:仅由密钥持有者掌握,用于解密公钥加密的消息或生成签名。
在非对称加密中:
1. 如果你使用公钥加密数据,那么只有拥有对应私钥的人才能解密。
2. 如果你用私钥对数据进行签名,那么任何人都可以用公钥验证签名的真实性。
1.2. 常见的非对称加密算法
常见的非对称加密算法包括RSA(Rivest-Shamir-Adleman)、DSA(Digital Signature Algorithm)、ECC(Elliptic Curve Cryptography)
1.2.1. RSA(Rivest-Shamir-Adleman)
- 原理: RSA 基于大素数分解的数学难题。其安全性依赖于两个大素数相乘后,无法有效反推出这两个素数。
- 用法: RSA 既可以用于加密也可以用于数字签名,是历史上应用最广泛的非对称加密算法之一。
- 优点: 1.广泛使用,支持很多标准和协议,如 TLS/SSL、HTTPS、电子邮件加密等;2.可以同时用于加密和签名。
- 缺点: 1.随着密钥长度增加,性能下降较大,尤其是加密速度较慢;2.随着量子计算的威胁,RSA 可能面临更大的安全风险。
1.2.2. DSA(Digital Signature Algorithm)
- 原理: DSA 基于离散对数问题,与 RSA 不同,它依赖于对数问题的数学难题,专门设计用于数字签名,并不支持加密。DSA 产生一对密钥,使用私钥签名,公钥验证签名。
- 用法: 主要用于数字签名,不能用于加密。
- 优点: 1.相对高效的数字签名验证过程,适合验证大量签名;2.标准化算法,早期用于很多电子签名方案。
- 缺点: 1.只能用于签名,不能加密数据;2.安全性不如 ECC,尤其在现代的密钥长度下,DSA 逐渐被 ECDSA 替代。3.在应用中逐渐被淘汰。
1.2.3. ECC(Elliptic Curve Cryptography)
- 原理: ECC 基于椭圆曲线离散对数问题。相比于 RSA 和 DSA,ECC 在相同的安全性下使用更短的密钥,从而提供更好的性能和更高的安全性。
- 用法: ECC 支持多种用途:
1.ECDSA(椭圆曲线数字签名算法): 用于数字签名和验证。
2.ECIES(椭圆曲线集成加密方案): 用于加密数据。
3.ECDH(椭圆曲线 Diffie-Hellman): 用于密钥交换。
- 优点:
1.安全性高:在相同的密钥长度下,ECC 比 RSA 和 DSA 更安全。例如,256 位 ECC 密钥的安全性大致相当于 3072 位 RSA 密钥。
2.性能好:由于较短的密钥,ECC 运算效率更高,特别适合移动设备等资源有限的环境。
3.被广泛应用于现代安全协议中,如 TLS/SSL、区块链中的数字签名。
- 缺点:
1.实现复杂度较高。
2.与RSA相比,ECC算法的历史较短,仍在发展和广泛应用中。
1.2.4. 非对称加密算法比较
特性 | RSA | DSA | ECC |
算法基础 | 大素数分解问题 | 离散对数问题 | 椭圆曲线离散对数 |
用途 | 加密和签名 | 仅签名 | 加密、签名和密钥交换 |
性能 | 密钥长度大,性能慢 | 只支持签名,但相对较快 | 密钥短,性能优越 |
密钥长度 | 较长(2048 位以上) | 较长(1024 位以上) | 较短(256 位 ECC 相当于 3072 位 RSA) |
应用场景 | HTTPS、TLS、电子邮件加密 | 电子签名 | 现代安全协议、区块链、加密货币 |
1.2.5. SM2加密算法
SM2 是中国国家密码标准中的一种椭圆曲线公钥密码算法,它是基于椭圆曲线加密(ECC)的具体实现。SM2 由中国密码标准化委员会提出,并已成为中国国家标准(GB/T 32918-2016),主要应用于数字签名、数据加密和密钥交换等领域。
SM2 的主要特性和组成
- 基于椭圆曲线加密 (ECC):SM2 的基础是 ECC(Elliptic Curve Cryptography),它使用椭圆曲线上的数学运算进行加密。
- 使用的椭圆曲线:SM2 使用的椭圆曲线参数是sm2p256v1,该曲线和国际标准中的secp256r1曲线类似,是一个 256 位的素数有限域上的椭圆曲线。
主要功能
SM2 具有三个主要的功能模块:
- SM2 数字签名算法:用于验证消息的完整性和真实性。类似于国际上使用的 ECDSA(椭圆曲线数字签名算法)。
- SM2 加密算法:用于加密敏感数据,类似于 ECC 中的 ECIES(Elliptic Curve Integrated Encryption Scheme)。
- SM2 密钥交换协议:用于在通信双方之间安全地交换密钥,类似于 ECC 中的 ECDH(Elliptic Curve Diffie-Hellman)。
1.3. 生成非对称加密算法的密钥对
生成的密钥对(私钥+公钥)方法,以SM2算法为例
1.3.1. OpenSSL生成密钥对
先确保openssl是3.0以上,并且支持国密算法;如若版本过低,或者不支持国密,可在openssl官网下载最新版本并安装;Downloads | Libraryhttps://openssl-library.org/source/编译前启用国密SM支持:
./config enable-sm2 enable-sm3 enable-sm4
使用OpenSSL生成私钥
openssl ecparam -genkey -name SM2 -noout -out sm2_private.pem
- openssl ecparam:用于生成椭圆曲线参数和密钥。
- -genkey:表示生成一个新的椭圆曲线私钥。
- -name SM2:指定使用 SM2 椭圆曲线参数。SM2 是基于椭圆曲线密码学的中国国家标准。
- -noout:不输出曲线参数,仅生成私钥。(常见的曲线如SM2,私钥中不需要曲线参数,因为密码学库预先定义了这些曲线的参数。)
- -out sm2_private.pem:将生成的私钥保存到 sm2_private.pem 文件中。
使用OpenSSL提取公钥
openssl ec -in sm2_private.pem -pubout -out sm2_public.pem
- openssl ec:用于处理椭圆曲线密钥。
- -in sm2_private.pem:指定输入文件,即之前生成的 sm2_private.pem,该文件包含了 SM2 私钥。
- -pubout:从私钥中提取出对应的公钥,并输出到文件中。
- -out sm2_public.pem:将生成的公钥保存到 sm2_public.pem 文件中。
1.3.2. GmSSL生成密钥对
GmSSL是由北京大学自主开发的国产商用密码开源库,实现了对国密算法、标准和安全通信协议的全面功能覆盖;本文使用的GmSSL版本如下:GmSSL 3.1.2 Dev
GitHub - guanzhi/GmSSL: 支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱
使用GmSSL生成SM2非对称算法的密钥对只需要一条命令,但是需要输入一个密码来对私钥进行加密:
gmssl sm2keygen -pass "your_password" -out private_key.pem -pubout public_key.pem
GmSSL sm2keygen的usage如下:
usage: sm2keygen Options
-pass pass Password to encrypt the private key
-out pem Output password-encrypted PKCS #8 private key in PEM format
-pubout pem Output public key in PEM format
2. 证书
证书即公钥证书。虽然公钥-私钥对是非对称加密的核心,但实际场景中几乎都是使用公钥证书进行验签和加密。
证书在现代数字安全中扮演着至关重要的角色,它提供了一种安全、标准化的方式来管理和验证实体之间的通信身份。
2.1. 证书是什么?
证书是一种数字文档,里面包含了用于身份验证的公钥和一系列相关信息。证书由权威机构(证书颁发机构,CA)签名,表明该证书内容的真实性。它通常遵循X.509标准。
证书的核心部分包括:
- 公钥:用于加密数据或验证签名。证书的核心是一个公钥。
- 身份信息:如主体的名称、域名或IP地址,用于表明这个公钥属于哪个实体。
- 颁发者信息:指明由哪个证书颁发机构(CA)签发了这个证书。
- 数字签名:CA对证书进行数字签名,证明它是合法且经过认证的。
- 有效期:证书的生效时间和到期时间。
2.2. 为什么使用证书?
上面提到,在实际场景中几乎都是使用公钥证书进行验签和加密,有几个关键原因:
身份认证和信任链
- 公钥本身不提供身份信息,它只是一个加密密钥。为了确保某个公钥确实属于某个实体(如网站或公司),需要有一种方式来绑定该公钥与实体的身份信息。
- 证书通过由证书颁发机构(CA)签名来实现这个目的。CA 作为一个受信任的第三方,可以确认证书中的公钥确实属于声称的实体。因此,证书不仅包含公钥,还包含实体的身份信息,并通过 CA 的签名来保证这些信息的真实性。
信任的传递
- 证书通过信任链建立信任。用户不需要直接信任每一个公钥,而是通过信任 CA 来间接信任证书中的公钥。浏览器和操作系统中预先存储了大量受信任的 CA 根证书,因此,当浏览器收到一个网站的证书时,可以通过验证信任链来确认该网站是否可信。
- 公钥本身没有信任机制,无法传递信任关系。
安全性和防伪
- 单纯的公钥无法保证它没有被篡改或伪造。一个攻击者可以生成一个公钥并假冒它来自某个实体。但证书由 CA 签发,并包含了数字签名,用于防止篡改。通过验证证书的签名,可以确保公钥及其相关的身份信息是可信的。
有效期与撤销
- 证书包含了有效期和撤销机制,方便管理,而单一的公钥没有这些管理机制。
2.3. 证书工作原理
证书在数据加密和身份验证中的作用尤为重要,通常涉及以下过程(以SSL/TLS 证书工作流程举例):
- 客户端请求网站(服务器):当你访问一个启用了HTTPS的网站时,浏览器首先向服务器请求证书。
- 服务器发送证书:服务器将其公钥证书发送给客户端。
- 客户端验证证书:浏览器通过内置的受信任CA列表验证该证书的颁发机构。如果证书有效,浏览器生成一个临时的对称密钥,并用服务器的公钥加密后发送给服务器。
- 服务器使用私钥解密:服务器使用与证书对应的私钥解密客户端发来的加密信息,得到临时的对称密钥。
- 一旦协商出了对称密钥,后续的数据传输使用对称加密算法(如 AES、ChaCha20)进行加密(这种加密方式效率高、速度快),进而建立一个安全的加密通信通道。(对称密钥是临时的,这意味着每个 SSL/TLS 会话都会生成新的会话密钥,从而增强安全性,即便某个会话的密钥被破解,也不会影响其他会话的安全。)
2.4. 证书的签发
证书的签发通常是通过证书颁发机构(CA)或者自签名证书来实现的。
2.4.1 证书颁发机构(CA)
CA(Certificate Authority,证书颁发机构)是一种在互联网和通信中提供数字证书的组织或机构,如DigiCert、Let's Encrypt、GlobalSign等)。CA 通过签发证书,验证公钥与实体(个人、组织、服务器)的身份绑定,从而建立一条信任链,确保通信的安全性和真实性。
CA 的主要作用
- 签发证书:CA 负责签发公钥证书,这个证书中包含了实体的公钥、实体的身份信息、证书的有效期,以及 CA 自身的数字签名。
- 验证身份:通过使用数字签名,CA 为公钥和身份信息的绑定提供可信证明,确保通信双方的身份真实性。
- 管理和吊销证书:CA 负责管理证书的有效期,并有权吊销已经签发的证书(例如在私钥泄露、证书过期等情况下)。
CA 的工作流程
- 实体申请证书:服务器或个人向 CA 提交一个证书签名请求(CSR),其中包含了公钥和需要绑定的身份信息。
- CA 验证身份:CA 对申请者进行身份验证(例如通过域名验证、组织验证等)。
- 签发证书:验证通过后,CA 使用自己的私钥对申请者的公钥及身份信息进行签名,生成证书并颁发。
- 客户端验证:客户端(例如浏览器)在收到证书时,会使用 CA 的公钥来验证该证书的真实性。
CA 信任链
一个完整的信任链通常由根证书、子证书和服务器证书组成:
- 根证书:由 CA 自己签发,是整个信任链的起点。浏览器和操作系统预装了很多知名 CA 的根证书。
- 中间证书:一些大型 CA 会使用中间证书(Intermediate Certificate)来签发最终的服务器证书,以增加安全性和灵活性。
- 服务器证书:用于 HTTPS 等应用,最终由中间证书或根证书直接签发。
2.4.2 自签名证书与受信任 CA 证书
自签名证书
- 定义:由实体自己签发和签名的证书。它并不被公共 CA 所信任,因此通常用于内部测试或开发环境。
-
使用场景:
内部网络:在公司内部网络或私有网络中,使用自签名证书进行内部服务的安全通信。
测试环境:在开发和测试环境中,为了方便,可以使用自签名证书。
私有CA:某些组织可能会自己管理一个内部CA系统,自签名证书是这些私有CA的根证书。 -
优缺点:
优点:不需要依赖外部CA,成本低,可以灵活管理。
缺点:需要手动在客户端上安装和信任自签名证书,增加了管理工作量。
受信任 CA 证书
- 定义:由公共 CA(如 DigiCert、Let’s Encrypt)签发的证书,受信任CA证书被操作系统、浏览器和其他应用程序默认信任。使用这些证书的服务器可以在不需要手动干预的情况下被广泛信任。
-
使用场景:
公共网络:在互联网上提供服务(如HTTPS网站)时,使用受信任CA证书以确保所有客户端都可以信任连接。
商业应用:大多数企业应用和商业服务需要受信任的CA证书,以确保数据安全和身份验证的可靠性。 -
优缺点:
优点:被广泛信任,无需在客户端上做任何修改即可使用。
缺点:可能需要支付费用才能获取证书(虽然也有免费的选项如Let's Encrypt),更新和管理证书需要时间和精力。
2.4.3 证书签名请求(CSR)
CSR(Certificate Signing Request,证书签名请求)是在申请数字证书之前由申请者生成的数据文件,其中包含了申请者的公钥和相关的身份信息。CSR 是提交给 CA(证书颁发机构)进行数字证书的签发。
CSR 的组成部分
一个典型的 CSR 文件包含以下信息:
- 公钥:申请者的公钥,用于加密和解密数据以及签名的验证。
- 申请者的识别信息:包括国家、省/州、城市、组织、组织单位和通用名称(如域名)等。
- 签名:使用申请者的私钥对整个请求内容进行签名,确保 CSR 的真实性和完整性。
CSR 的生成过程
生成 CSR 文件时,通常需要提供密钥对(公钥和私钥)。以下是生成 CSR 的主要步骤:
- 生成密钥对:首先,生成一对公钥和私钥。私钥需要妥善保管,不能随意公开。
- 创建 CSR:使用公钥和身份信息(如国家、组织名称、域名等)生成 CSR 文件,并使用私钥对其签名。
- 提交给 CA:将生成的 CSR 文件提交给 CA。CA 会验证 CSR 中的信息,并使用自己的私钥对其进行签名,从而生成一个合法的数字证书。
CSR 的作用
- 申请数字证书:CSR 是申请数字证书的必要材料,它包含了申请者的公钥和身份信息,供 CA 验证并签发证书。
- 签名验证:。CSR 中包含的公钥和身份信息经过私钥签名,CA 可以通过验证签名确保公钥的真实性,并验证身份信息。
- 加密通信:CSR 生成的证书最终用于加密通信(如 HTTPS)。证书中包含的公钥用于数据加密、身份验证等操作。
CSR 和数字证书的关系
CSR 是申请数字证书的第一步,包含公钥和身份信息。CA 验证并签署 CSR 后,生成的证书中包含该公钥和身份信息,由 CA 的签名保证其可信度,从而使证书可以用于加密通信和身份验证。
2.5. 自签名证书的生成与使用
下面将使用OpenSSL和GmSSL生成自签名证书,并使用它作为私有CA根证书来签发其他证书。(生成的自签名证书和签发的其他证书都是不被公共 CA 所信任的,仅作为内部使用)
2.5.1 OpenSSL生成自签名证书和使用
生成自签名根证书
首先,我们生成一个自签名的根证书,它将作为根 CA(证书颁发机构)来签发其他证书:
# 生成私钥
openssl ecparam -genkey -name SM2 -noout -out root_private.pem
# 生成自签名的根证书(有效期10年)
openssl req -x509 -new -key root_private.pem -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=MyRootCA" -out root_cert.pem
- -x509:生成自签名证书
- -days 3650:证书有效期 3650 天(约 10 年)
- -subj:提供证书中包含的相关信息
生成服务器的密钥对和 CSR(证书签名请求)
假设我们的一台服务器需要自己的证书,用于HTTPS;现在,为服务器生成一对密钥,并生成一个 CSR(证书签名请求),用于申请证书:
# 生成服务器私钥
openssl ecparam -genkey -name SM2 -noout -out server_private.pem
# 生成CSR请求
openssl req -new -key server_private.pem -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=www.myserver.com" -out server.csr
- server_private.pem:服务器私钥
- server.csr:服务器的 CSR 文件,其中包含服务器的公钥和相关的身份信息
使用自签名根证书签发服务器证书
我们用自签名的根证书来签发服务器证书,当使用 SM2 进行签名时,数据首先会经过 SM3 哈希算法生成摘要,然后再使用 SM2 的私钥对这个哈希摘要进行签名,故可以使用 -sm3 指定使用 SM3 作为哈希算法:
# 使用自签名的根证书签发服务器证书,有效期1年
openssl x509 -req -in server.csr -CA root_cert.pem -CAkey root_private.pem -CAcreateserial -out server_cert.pem -days 365 -sm3
也可以不指定-sm3,让OpenSSL自动选择:
openssl x509 -req -in server.csr -CA root_cert.pem -CAkey root_private.pem -CAcreateserial -out server_cert.pem -days 365
- -in server.csr:指定服务器的 CSR 文件
- -CA root_cert.pem:使用自签名根证书作为 CA 证书
- -CAkey root_private.pem:使用自签名根证书对应的私钥
- -CAcreateserial:生成一个 CA 序列号文件
- -out server_cert.pem:生成的服务器证书
- -days 365:证书有效期 365 天
验证生成的服务器证书
你可以检查生成的服务器证书内容,以确认是否正确:
openssl x509 -in server_cert.pem -text -noout
2.5.2 GmSSL生成自签名证书和使用
使用GmSSL生成自签名根证书和使用这个根证书签发其他证书,会用到下面命令(节选自GmSSL的help)
command -help
Commands:
reqgen Generate certificate signing request (CSR)
reqsign Generate certificate from CSR
reqparse Parse and print a CSR
certgen Generate a self-signed certificate
certparse Parse and print certificates
certverify Verify certificate chain
certrevoke Revoke certificate and output RevokedCertificate record
- reqgen: 生成证书签名请求(CSR),即申请证书时需要的请求文件。
- reqsign: 根据生成的 CSR 来颁发证书(即使用 CSR 生成证书)。
- reqparse: 解析并打印 CSR 的详细信息,便于查看请求中的内容。
- certgen: 生成自签名证书,通常用于生成根证书或临时证书。
- certparse: 解析并打印证书的内容,显示证书的详细信息。
- certverify: 验证证书链,检查证书是否通过颁发机构的信任链。
- certrevoke: 吊销证书,输出一个 RevokedCertificate 记录,标记证书已被吊销。
生成自签名根证书
首先,生成一个根CA证书所需的私钥(使用SM2算法)
gmssl sm2keygen -pass P@ssw0rd -out rootcakey.pem
接下来,使用根 CA 私钥生成自签名的根证书:
gmssl certgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN ROOTCA -days 3650 \
-key rootcakey.pem -pass P@ssw0rd \
-ca -path_len_constraint 6 \
-out rootcacert.pem
- -C CN:国家(Country),这里设置为 “CN”(中国)。
- -ST Beijing:省/州(State or Province),这里设置为 “Beijing”(北京)。
- -L Haidian:地区(Locality),这里设置为 “Haidian”(海淀区)。
- -O PKU:组织名称(Organization),这里设置为 “PKU”(北京大学)。
- -OU CS:组织单位名称(Organizational Unit),这里设置为 “CS”(计算机科学部门)。
- -CN ROOTCA:证书的 Common Name,这里设置为 “ROOTCA”,标识这是根证书的名称。
- -days 3650:证书的有效期,设置为 3650 天(大约 10 年)。
- -key rootcakey.pem:指定用于签名根证书的私钥文件,即根 CA 的私钥。
- -pass P@ssw0rd:用于解密私钥的密码。
- -ca:指定这是一个 CA 证书,即自签名证书。
- -path_len_constraint 6:这个参数设置证书链的路径长度约束为 6,表示最多允许 6 级子证书。
- -out rootcacert.pem:生成的自签名根证书文件的输出路径。
现在,你已经生成了一个自签名的根证书,root_cert.pem 是你的根证书,root_private.pem 是对应的私钥。
使用根证书签发子证书
首先,生成一个新的私钥,用于被签发的证书(通常是服务器或用户的私钥):
gmssl sm2keygen -pass P@ssw0rd -out cakey.pem
然后,使用这个私钥生成一个证书签名请求(CSR):
gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN SubCA -key cakey.pem -pass P@ssw0rd -out careq.csr
这里 -CN 指定证书的 Common Name,通常是服务器的域名。
使用根证书签发证书
现在,可以使用之前生成的 自签名根证书 签发这个 CSR 所请求的证书:
gmssl reqsign -in careq.csr -serial_len 12 -days 365 \
-cacert rootcacert.pem -key rootcakey.pem -pass P@ssw0rd \
-out cacert.pem
解析子证书
gmssl certparse -in cacert.pem
校验子证书
gmssl certverify 命令用于验证证书链的有效性,它可以检查证书是否由指定的 CA 证书签发:
gmssl certverify -in cacert.pem -cacert rootcacert.pem
3. 常见的后缀
3.1 pem(Privacy Enhanced Mail)
编码格式:Base64 编码后的 DER 数据,包含了以 -----BEGIN 和 -----END 标签包裹的内容。常见的标签包括 CERTIFICATE、PRIVATE KEY、PUBLIC KEY 等。
用途:用于存储证书、公钥、私钥以及证书链。PEM 文件中可以包含
- 证书:-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
- 私钥:-----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY-----
- 公钥:-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----
- 证书链:多个证书(根证书、链证书)可以组合存储在同一个 .pem 文件中。
应用场景:广泛应用于 Web 服务器(如 Apache、Nginx),以及加密工具(如 OpenSSL)中,特别是基于 HTTPS 协议的网站安全通信。
3.2 cer/crt
编码格式:.cer 和 .crt 可以是 PEM 编码的 Base64 数据,也可以是 DER 编码的二进制数据。两者并没有区别,通常使用 .crt 或 .cer 的后缀是基于系统和平台的习惯。
用途:用于存储证书、公钥、私钥以及证书链。PEM 文件中可以包含
- 证书:通常用于存储 X.509 公钥证书,可能是 PEM 编码(Base64)或 DER 编码(二进制)格式。
- 证书链:同样可以包含完整的证书链(根证书、中间证书等)。
应用场景:在 Windows 系统中经常使用 .cer,而 .crt 则更常见于 Linux 系统的 Apache、Nginx 等服务器配置中。无论是 .cer 还是 .crt,通常不包含私钥。
3.3 der(Distinguished Encoding Rules)
编码格式:DER 是 ASN.1 的一种二进制编码格式,具有确定性和无二义性的特点,常用于密码学领域。ASN.1(Abstract Syntax Notation One)是一种描述数据结构的标准语言,而 DER 是用于将这些数据结构转换为二进制的编码规则。与 PEM 格式不同,DER 是纯二进制数据,适合机器处理,但人类不可读。
用途:用于存储证书、公钥、私钥以及证书链。PEM 文件中可以包含
- 证书:存储 X.509 证书的二进制编码形式。
- 私钥:DER 格式可以用于存储私钥,但一般不会与证书放在一起发布,更多用于内部处理。
应用场景:DER 格式常用于需要低级别处理的应用,例如在 Java 平台中,DER 格式被广泛使用。DER 格式适合计算机内部处理,而 PEM 格式更适合人类阅读和配置。