非对称加密与国密SM2(上)

前言

        最近在研究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. 非对称加密算法比较

特性RSADSAECC
算法基础大素数分解问题离散对数问题椭圆曲线离散对数
用途加密和签名仅签名加密、签名和密钥交换
性能密钥长度大,性能慢只支持签名,但相对较快密钥短,性能优越
密钥长度较长(2048 位以上)较长(1024 位以上)较短(256 位 ECC 相当于 3072 位 RSA)
应用场景HTTPS、TLS、电子邮件加密电子签名现代安全协议、区块链、加密货币

1.2.5. SM2加密算法

        SM2 是中国国家密码标准中的一种椭圆曲线公钥密码算法,它是基于椭圆曲线加密(ECC)的具体实现。SM2 由中国密码标准化委员会提出,并已成为中国国家标准(GB/T 32918-2016),主要应用于数字签名、数据加密和密钥交换等领域。

SM2 的主要特性和组成

  1. 基于椭圆曲线加密 (ECC):SM2 的基础是 ECC(Elliptic Curve Cryptography),它使用椭圆曲线上的数学运算进行加密。
  2. 使用的椭圆曲线:SM2 使用的椭圆曲线参数是sm2p256v1,该曲线和国际标准中的secp256r1曲线类似,是一个 256 位的素数有限域上的椭圆曲线。

主要功能
SM2 具有三个主要的功能模块:

  1. SM2 数字签名算法:用于验证消息的完整性和真实性。类似于国际上使用的 ECDSA(椭圆曲线数字签名算法)。
  2. SM2 加密算法:用于加密敏感数据,类似于 ECC 中的 ECIES(Elliptic Curve Integrated Encryption Scheme)。
  3. SM2 密钥交换协议:用于在通信双方之间安全地交换密钥,类似于 ECC 中的 ECDH(Elliptic Curve Diffie-Hellman)。

1.3. 生成非对称加密算法的密钥对

        生成的密钥对(私钥+公钥)方法,以SM2算法为例

1.3.1. OpenSSL生成密钥对

        先确保openssl是3.0以上,并且支持国密算法;如若版本过低,或者不支持国密,可在openssl官网下载最新版本并安装;Downloads | Libraryicon-default.png?t=O83Ahttps://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 证书工作流程举例):

  1. 客户端请求网站(服务器):当你访问一个启用了HTTPS的网站时,浏览器首先向服务器请求证书。
  2. 服务器发送证书:服务器将其公钥证书发送给客户端。
  3. 客户端验证证书:浏览器通过内置的受信任CA列表验证该证书的颁发机构。如果证书有效,浏览器生成一个临时的对称密钥,并用服务器的公钥加密后发送给服务器。
  4. 服务器使用私钥解密:服务器使用与证书对应的私钥解密客户端发来的加密信息,得到临时的对称密钥。
  5. 一旦协商出了对称密钥,后续的数据传输使用对称加密算法(如 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 格式更适合人类阅读和配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值