密码学中都有哪些不同的证书类型和格式

     2023-02-22     176

关键词:

【中文标题】密码学中都有哪些不同的证书类型和格式【英文标题】:What are different certificate types, formats in Cryptography密码学中有哪些不同的证书类型和格式 【发布时间】:2012-07-26 09:29:09 【问题描述】:

我们正在为我们的一位客户添加 SSL 握手中的服务器证书验证。作为密码学和 C 世界的新手,我想我应该先弄清楚我对这些东西的概念,然后再开始实施。

因此,我在 Google 上搜索了很多,主要是为了寻找证书概念,但无法更好地理清我的概念,让我更满意。实际上它增加了更多的混乱。 :)

以下是一些我几乎完全不明白的事情: 1.什么是base64格式?它和DER一样吗? 2. PEM文件总是包含base64内容? 3. Windows 证书存储使用什么格式?是二进制的吗?

有人可以在这里帮助我吗? 如果这些事情能为我清除,将非常感谢。

【问题讨论】:

【参考方案1】:

X.509 证书的结构使用ASN.1 定义。下面是an X.509 certificate整体结构定义的摘录:

Certificate  ::=  SEQUENCE  
    tbsCertificate       TBSCertificate,
    signatureAlgorithm   AlgorithmIdentifier,
    signatureValue       BIT STRING  

TBSCertificate  ::=  SEQUENCE  
    version         [0]  EXPLICIT Version DEFAULT v1,
    serialNumber         CertificateSerialNumber,
    signature            AlgorithmIdentifier,
    issuer               Name,
    validity             Validity,
    subject              Name,
    subjectPublicKeyInfo SubjectPublicKeyInfo,
    issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    extensions      [3]  EXPLICIT Extensions OPTIONAL
                         -- If present, version MUST be v3
    

Certificate 值(填充了包含的值)使用DER 格式进行编码,这是一种二进制格式。

Base64 是一种将二进制序列编码为文本的通用方法,通过减少用于可读 ASCII 字符的字节集(因此这种表示形式更长)。

PEM 格式的证书是证书的 DER 编码的 Base64 编码,每个 64 字符块的末尾有一个换行符,放置在分隔符之间:

-----BEGIN CERTIFICATE-----
MIIB2zCCAUSgAwIBAwIBADANBgkqhkiG9w0BAQQFADAYMRYwFAYDVQQDEw1OZXRn
...
-----END CERTIFICATE-----

您还可以拥有 PEM 格式的私钥,例如,在这种情况下,分隔符将是 -----BEGIN RSA PRIVATE KEY-----(并匹配 END)。

在线上,在 TLS 连接期间,使用 DER。

Windows 证书存储在内部使用什么并不重要,它应该能够导入/导出 DER 或 PEM/Base64 证书。


证书“类型”是比 DER/base64 格式更广泛的主题。大多数用于 SSL/TLS 的证书都是 X.509 证书。然后你会得到使用配置文件。最常见的是Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile,它实质上定义了证书颁发机构应如何颁发证书以及实体应如何验证远程证书。

您可能还对这些问题感兴趣:

What does it mean for a digital certificate to be “signed”? What is an SSL certificate intended to prove, and how does it do it?

更一般地说,买一本关于 PKI 的书应该会有所帮助。

【讨论】:

感谢布鲁诺,它帮了很多忙!我现在有更清晰的看法。关于 Windows 存储格式,我使用 Crypto API 来检索证书,看起来它只支持二进制格式。我需要编写自己的 base64 编码器来转换这些证书。

iOS中都有哪些不同类型的通知以及如何正确配置它们?

】iOS中都有哪些不同类型的通知以及如何正确配置它们?【英文标题】:WhataredifferenttypesofnotificationsiniOSandhowtoconfigurethemcorrectly?iOS中有哪些不同类型的通知以及如何正确配置它们?【发布时间】:2017-02-1613:15:25【问题描述】:当... 查看详情

iOS中都有哪些不同类型的通知以及如何正确配置它们?

】iOS中都有哪些不同类型的通知以及如何正确配置它们?【英文标题】:WhataredifferenttypesofnotificationsiniOSandhowtoconfigurethemcorrectly?iOS中有哪些不同类型的通知以及如何正确配置它们?【发布时间】:2017-02-1613:15:25【问题描述】:当... 查看详情

提要中都有哪些类型的帖子?

】提要中都有哪些类型的帖子?【英文标题】:Whattypesofpostsareinafeed?提要中有哪些类型的帖子?【发布时间】:2011-11-1204:15:22【问题描述】:我想知道我可以在提要中期待哪些所有可能类型的帖子。http://developers.facebook.com/docs/ref... 查看详情

C#bond 中都有哪些可用的数据类型?

】C#bond中都有哪些可用的数据类型?【英文标题】:WhataretheavailabledatatypesinC#bond?C#bond中有哪些可用的数据类型?【发布时间】:2018-01-1115:05:40【问题描述】:我想知道用C#键格式表示应该包含这些字段的表的最佳方法是什么?字... 查看详情

Java 中都有哪些不同的记忆技术? [关闭]

】Java中都有哪些不同的记忆技术?[关闭]【英文标题】:WhatarethedifferenttechniquesformemoizationinJava?[closed]Java中有哪些不同的记忆技术?[关闭]【发布时间】:2011-04-0703:05:53【问题描述】:我知道这个http://onjava.com/pub/a/onjava/2003/08/20/me... 查看详情

git 中都有哪些不同的存储库格式版本(对于 core.repositoryFormatVersion 设置)?

】git中都有哪些不同的存储库格式版本(对于core.repositoryFormatVersion设置)?【英文标题】:whatarethedifferentrepositoryformatversions(forthecore.repositoryFormatVersionsetting)ingit?git中有哪些不同的存储库格式版本(对于core.repositoryFormatVersion设... 查看详情

android 中都有哪些不同的栏(状态栏、操作栏、导航栏、工具栏等)?

】android中都有哪些不同的栏(状态栏、操作栏、导航栏、工具栏等)?【英文标题】:Whatarethedifferentbars(statusbar,actionbar,navigationbar,toolbaretc.)availableinandroid?android中有哪些不同的栏(状态栏、操作栏、导航栏、工具栏等)?【发... 查看详情

ospf协议所支持的网络类型中都有哪些是需要选举dr和bdr的?

一共五种网络类型,1BROADCAST,2NON_BROADCAST,3POINT_TO_MULTIPOINT4POINT_TO_MULTIPOINT NON_BROADCAST5POINT_TO_POINT其中BROADCAST,NON_BROADCAST需要选举DR和BDR参考技术A广播类型网络中需要选举DR和BDR。通常常见的就是我们应用中的以太网口和快速以... 查看详情

python语言中都有哪些数据类型

python数据类型有很多,这里为大家简单例举几个:第一种:整数python可以处理任意大小的整数,当然包含负整数,在python程序中,整数的表示方法和数学上的写法一模一样,比如:1,100,-8080,0,等。计算机由于使用二进制,所以... 查看详情

总线中都有哪些类型的信号线、分别传送哪种信息?

参考技术A总线是连接多个功能部件的一组公共信号线,在计算机系统中,总线是各个部件之间传送信息地公共通路。总线标准的主要特性:1.物理规范:指总线物理连接的方式。2.引线功能:描写这一组总线中每一根线的名称、... 查看详情

httpsssl主流数字证书有哪些格式

一般来说,主流的Web服务软件,通常都基于两种基础密码库:OpenSSL和Java。Tomcat、Weblogic、JBoss等,使用Java提供的密码库。通过Java的Keytool工具,生成JavaKeystore(JKS)格式的证书文件。Apache、Nginx等,使用OpenSSL提供的密码库,生成... 查看详情

java中都有哪些数据结构

数据结构: ①数组(Array) 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数 据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数... 查看详情

jquery中都有哪些方法可以遍历节点

参考技术A一、原理区别一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET... 查看详情

c语言中的“货币类型”用啥表示?在程序中都有哪些书写形式?越全越好...

参考技术A如果是货币类型,可以考虑使用枚举enumDollar,Jan,...Currency; 参考技术Bdoublefloat 参考技术C你的问题不清楚哦。。 查看详情

在电商网站开发中都有哪些常见漏洞

  一、常见PHP网站安全漏洞对于PHP的漏洞,目前常见的漏洞有五种。分别是Session文件漏洞、SQL注入漏洞、脚本命令执行漏洞、全局变量漏洞和文件漏洞。这里分别对这些漏洞进行简要的介绍。  1、session文件漏洞Session攻击... 查看详情

perl 中都有哪些可用的框架 [关闭]

】perl中都有哪些可用的框架[关闭]【英文标题】:Whataretheframeworksavailableinperl[closed]perl中有哪些可用的框架[关闭]【发布时间】:2015-07-0101:17:01【问题描述】:谁能列出perl中可用的框架以及用于测试和工具开发的框架。我对此有... 查看详情

c语言中标识符的命名规则是怎样的?c语言中都有哪些常见的数据类型?

参考技术Ac语言变量命名:数字、字母、下划线,都可以为变量命名。做为变量名的开头不能为数字,如3a_是错的,而a_3或_a3是正确变量名不能为关键字,像if'else'printf等等都不能常见的数据类型:整型、浮点型、字符型、... 查看详情

java中都有哪些类?

Java有八大基本类型,可以分为四类:1、byte:byte数据类型是8位、有符号的,以二进制补码表示的整数;最小值是-128(-2^7);最大值是127(2^7-1);默认值是0;byte类型用在大型数组中节约空间,主要代替整数,因为byte变量... 查看详情