您的位置:

了解DER编码

一、DER编码解析

DER(Distinguished Encoding Rules)编码是ASN.1数据结构在ASN.1 DER标准下打包的二进制编码的格式规范。它是应用广泛的ASN.1编码之一。ASN.1是应用领域很广泛的一种数据表示和编码方式。ASN.1是Abstract Syntax Notation One(抽象语法标记语言第一版)的缩写。ASN.1是DSL领域的经典代表,业内有“数据的XML”之美誉。ASN.1可以只用于规范数据结构,而DER编码则是规范实际存储和传输数据的方式。

ASN.1规范的编码方式非常灵活,几乎可以描述任何数据类型。DER编码则是ASN.1进行编码时的一种约束,它规定了ASN.1数据结构如何序列化为二进制数据,使得数据能够在不同的计算机及不同语言之间互通。

二、DER编码的数字证书扩展名是什么

数字证书是一个数字形式的身份证明文件,用于验证文件的真实性和所有权。数字证书的扩展名包括.crt、.cer、.p7c等。而DER编码的数字证书的扩展名通常是 .cer

与 DER 编码有关的数字证书解码器能够自动识别DER编码格式,为了使证书能够转换为其它类型,使用DER编码是一个不错的选择。

三、DER编码证书

数码证书通常存储在X.509证书中。X.509证书使用 ASN.1 DER 编码格式,可以通过各种语言和工具进行解析和生成。在编码证书之前,我们通常使用私钥生成一对密钥,其中一个作为公共密钥被添加到证书中。

// 生成证书
openssl req -new -x509 -out my_cert.crt -keyout my_key.key -days 365

// 查看证书内容
openssl x509 -text -noout -in my_cert.crt

四、DER编码格式

DER编码格式的编码规则简洁明了,它是基于ASN.1编码规范的。ASN.1定义了表示结构数据,编码,解码和传输的标准类型和格式。由于DER是固定格式,因此在传输或存储数据时不必存储ASN.1结构信息,这将节省传输空间。

五、DER编码 PEM编码

PEM(PKCS#1、PKCS#8)格式定义了DER编码后的ASN.1类型数据和其他杂项,如加密算法、签名算法等如何编码。PEM格式本质上是ASN.1类型数据在文本形式下的表示,因此它通常将DER编码后的ASN.1类型数据转换为BASE64编码的文本文件。

// 将 DER 编码的证书转换为 PEM 格式
openssl x509 -inform der -in my_cert.crt -out my_cert.pem

六、DER编码的证书扩展名一般为

DER 编码的数字证书的扩展名通常是 .cer。该类型证书采用DER编码规范,并通常包含相应的公共密钥。除此之外,DER编码也可以用于其他格式的证书,例如X.509 SSL 证书和 PGP 证书。

七、DER编码的数字证书扩展名

数字证书的扩展名取决于证书格式。除了 .cer 之外,某些数字证书的扩展名还包括 .pem、.crt、.pfx、.p12等。

八、DER编码的格式如何实现

在Java中, DER 编码通常用于与数字证书和密钥存储器进行交互,例如 Keystore、Truststore、PKCS12等。

要实现DER编码的格式,需要使用Java Security API中的一些类,如X.509证书和ASN.1 DER编码的SubjectPublicKeyInfo结构。

// 获取DER编码的公钥
public static byte[] getDEREncodedPublicKey(PublicKey publicKey) throws IOException
{
    X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKey.getEncoded());
    ASN1Object asn1Object = ASN1Sequence.getInstance(x509EncodedKeySpec.getEncoded());
    SubjectPublicKeyInfo subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(asn1Object);
    return subjectPublicKeyInfo.getEncoded();
}

九、DER证书

DER编码形式可以用于存储和传输多种类型的证书,包括 TLS 证书、数字签名证书和代码签名证书等。DER证书可以用于实现安全通信、身份验证和代码签名,并已广泛应用于各种各样的互联网应用中。

下面是一个使用Java代码进行DER证书解析的例子:

// Load DER certificate
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream certificateIs = new FileInputStream("my_cert.cer");
X509Certificate cert = (X509Certificate) cf.generateCertificate(certificateIs);

// Extract information
System.out.println("Subject: " + cert.getSubjectDN());
System.out.println("Issuer: " + cert.getIssuerDN());
System.out.println("Serial number: " + cert.getSerialNumber());
System.out.println("Public key: " + cert.getPublicKey());
System.out.println("Validity period: " + cert.getNotBefore() + " - " + cert.getNotAfter());
System.out.println("Signature algorithm: " + cert.getSigAlgName());

十、结语

以上就是关于 DER 编码的详细阐述。通过本文,我们了解到Der编码是ASN.1数据结构在ASN.1DER标准下打包的二进制编码的格式规范。ASN.1规范的编码方式非常灵活,几乎可以描述任何数据类型。在实际应用中,DER编码的格式被应用于各种数字证书和密钥管理器中。