关于国密X.509证书规范笔记,及相关国标文档整理

概念

PKI体系相关概念

公钥基础设施(public key infrastructure/PKI):支持公钥管理体制的基础设施,提供鉴别、加密、完整性和不可否认性服务。
证书认证机构(certification authority/CA): 受用户信任,负责创建和分配证书的权威机构。证书认证机构也可以为用户创建密钥。
注册机构(registration authority/RA): 为用户办理证书申请、身份审核、证书下载、证书更新、证书注销以及密钥恢复等实际业务的办事机构或业务受理点。
终端实体(end entity/EE): 不以签署证书为目的而使用其私钥的证书主体或者是依赖(证书)方。
公钥证书(public key certificate): 用户的公钥连同其他信息,并由发布该证书的证书认证机构的私钥进行加密使其不可伪造。
数字证书(digital certificate): 由国家认可的,具有权威性、可信性和公正性的第三方认证机构(CA)进行数字签名的一个可信的数字化文件。
证书撤销列表(certificate revocation list/CRL): 一个已标识的列表,它指定了一套证书发布者认为无效的证书。除了普通CRL外,还定义了一些特殊的CRL类型用于覆盖特殊领域的CRL,表现形式为一个附带CA签名的列表文件
CRL分布点(CRL distribution point): 一个CRL目录项或其他CRL分发源;由CRL分布点分发的CRL可以包括仅对某CA所发证书全集某个子集的撤销条目,或者可以包括有多个CA的撤销条目。
证书认证路径/证书链(certification path): 一个DIT(目录信息树 directory infomation tree)中对象证书的有序序列,通过处理该有序序列及其起始对象的公钥可以获得该路径的末端对象的公钥。
认证业务说明(certification practice statement/CPS): 证书认证机构发放证书时遵循的业务说明。
证书策略(certification policy/CP): 是CA制定的一组规则,表明证书对特定群体的适用范围,或对不同安全需求类型的适用规则。
策略映射(policy mapping): 当某个域中的一个CA认证另一个域中的一个CA时,在第二个域中的特定证书策略可能被第一个域中的证书机构认为等价(但不必在各方面均相同)于第一个域中认可的特定证书策略。
在线证书状态查询服务(OCSP): 在线的证书状态查询服务,该服务的主要对象是依赖方

PKI系统(PKI system): 提供证书的颁发以及相关服务的软硬件设备和人员的总成。包括CA,RA,终端系统等一切于证书服务相关的组件
PKI应用(PKI application):使用数字证书以及相关信息、获得安全服务的软硬件系统
PKI互操作性能(PKI interoperability):两个以上(含两个)PKI系统或PKI应用正确地交互和使用证书以及相关安全信息的性能
完全互操作PKI系统(fully interoperability PKI system): 概念性的PKI系统,能够与所有PKI应用实现完全的互操作。
完全互操作PKI应用(fully interoperability PKI application): 概念性的PKI应用,能够与所有PKI系统实现完全的互操作。
PKI互操作能力等级(PKI interoperability level): 特定PKI系统与完全PKI应用的PKI互操作性能的量化结果,或者是特定PKI应用与完全PKI系统互操作性能的量化结果

证书相关概念

抽象语法记法(ASN.1): 用来组织复杂数据对象的表示法。类似于json
可辩别编码规则(DER): 对ASN.1对象进行编码的规则。
对象标识符(OID): 对象标识符
自颁发证书(self-issued certificate): 证书的主体和颁发者相同的CA证书

流程相关概念

在国标GB/T 19714-2005中定义了证书的产生和管理相关的各方面所需要的协议消息,包括申请证书、撤销证书、密钥更新、密钥恢复等。此处说明各种流程中的名词解释

个人安全环境(personal security environment/PSE): 证书及私钥的终端实体的安全本地存储
拥有证明(proof of possession/POP): 终端实体用以证明自己拥有(能够使用)与为之申请证书的公钥相对应的私钥
资料库(repository): 存储证书和CRL等信息,并提供无需验证的信息检索服务的数据库
初始化请求: 此消息用于实体在PKI体系中的最初初始化
认证请求: 当已存在于PKI体系中实体想获取额外的证书时使用此消息
POP挑战: 用以验证终端是否拥有加密密钥的消息
密钥更新请求: 用以更新已存在可用证书的消息。进行更新公钥或原有公钥的证书的替换
密钥恢复请求: 用来为终端恢复密钥的请求
作废请求: 当请求撤销一个证书(或多个)时,使用此消息
CA密钥更新公告: 当CA更新了自己的密钥对后,使用此消息
证书公告: 当新证书生成后,可以用此消息公告
作废公告: 当CA撤销或即将撤销一个证书时,可以使用此消息公告
CRL公告: 当CA签发一个新的CRL或一批CRL时,可以使用此公告

PKI互操作性能等级

PKI互操性是PKI系统和PKI应用之间的互操作的相对指标,取决于互操作双方的互操作能力。即由于双方能力的不同,会发生一方的互操作性能力过强或过弱,使得PKI功能不能正常使用,而降低系统整体得互操作性,详细描述见GB/T 29241-2012。
操作能力在国标内对等级进行了划分,分为五个等级,由低到高分别为IOL1、IOL2、IOL3、IOL4、IOL5,高等级是低等级能力得延申,高等级是完全支持低等级能力的。

PKI系统互操作能力:
IOL1 格式正确级
本级PKI系统的重要特征是能够颁发格式正确的证书和CRL。格式正确是PKI应用接受安全服务信息的基础。如果格式不正确,PKI应用就无法获取信息,相当于PKI系统提供的安全服务是不可用的。格式正确级主要考虑证书和CRL的基本格式、PKI系统的基本功能,确保达到本等级的PKI实体拥有基本的互操作能力,能够正确生成证书和CRL,以及正确地使用私有拓展项。

IOL2 内容明确级
本级PKI系统的重要特征是能够颁发内容明确的证书和CRL。通过对证书拓展项和CRL拓展项的使用,提供明确的信息;具有CPS,明确地描述证书服务过程;能够支持增量CRL或者OCSP,支持LDAP或者HTTP发布证书和CRL。安全服务依赖于从PKI系统获取的信息,充分明确的信息使更多的PKI应用能够接受安全服务。内容明确级要求PKI系统必须能够产生重要的证书和CRL拓展项,支持增量CRL或者OCSP,而且对格式正确级中提出的各项评估指标有了进一步限制,明确了安全服务信息的内容。

IOL3 功能完善级
本级PKI系统的重要特征是具备证书服务的完善功能,能够同时支持增量CRL和OCSP,同时支持LDAP和HTTP发布证书和CRL,正确地设定证书拓展项、CRL拓展项及OCSP拓展项的取值;具有CP,并具备执行CP/CPS的各种操作的能力。

IOL4 执行标准化级
本级PKI系统的重要特征是证书服务过程按照标准化流程执行,提供标准格式的完整CP/CPS,并按照标准流程执行该CP/CPS的各种操作。

IOL5 安全审计级
本级PKI系统的重要特征是可审计的证书服务管理过程,在标准化服务的基础上,进一步提供额外的可供第三方检查的审计证明,并在CP/CPS中有相应的安全程度声明。

PKI应用互操作能力:
IOL1格式正确级
本级PKI应用能够正确理解基本格式的证书和CRL。支持证书和CRL基本格式是PKI应用获取安全服务的基础。对证书和CRL的基本格式正确理解分析之后,PKI应用才能够正确地使用证书。格式正确级主要考虑对证书和CRL的基本格式支持,确保达到本等级的PKI实体能够使用证书和CRL,能够使用基本的安全服务信息。

IOL2内容明确级
本级PKI应用能正确理解证书和CRL中的各项内容,支持重要的证书拓展项和CRL拓展项,能够使用增量CRL或者OCSP,使用LDAP或者HTTP获取证书和CRL。PKI应用必须能够支持重要拓展项,从而明确地理解安全服务信息。

IOL3功能完善级
本级PKI应用能正确理解证书和CRL中的各项内容,支持重要的证书拓展项和CRL拓展项,能够使用增量CRL或者OCSP,使用LDAP或者HTTP获取证书和CRL。PKI应用能够支持所有的拓展项,能够处理各种拓展项的不同取值,从而实现更加完善的功能。

IOL4执行标准化级
本级PKI应用应按照标准化的流程执行证书查询、下载与验证等操作。

IOL5安全审计级
本级PKI应用可以提供应用程序的完全审计记录以及额外的可供第三方检查的保障。

GB/T 29241-2012中规定个各级别的PKI系统和PKI应用应提供的功能。

总结:
IOL1应具备颁发标准格式证书和CRL的能力,以及私有拓展能力。
IOL2应具备能够使用证书和crl中的拓展字段来声明CPS、支持增量CRL或OCSP,支持通过LDAP或HTTP发布证书或CRL。
IOL3应具备同时支持增量CRL和OCSP、同时支持LDAP和HTTP发布证书和CRL。正确设定证书拓展项。具备CP,并具备执行CP/CPS的各种操作的能力。
IOL4应该能按标准化流程执行,提供标准格式的完整CP/CPS,并按照标准流程执行CP/CPS中的各种操作。
IOL5能够在标准化服务上提供可供第三方检查的审计证明,并在CP/CPS中有相应的安全程度声明。

必须的PKI管理功能

  1. 根CA初始化
  2. 根CA密钥更新
  3. 下级CA初始化
  4. CRL产生
  5. PKI信息请求
  6. 交叉认证
  7. 终端实体初始化
  8. 获得PKI信息
  9. 根CA密钥的带外验证
  10. 证书请求
  11. 密钥更新

以上要求在GB/T 19714-2005中进行了明确的规定,功能通讯均使用ASN.1的标准格式进行请求和响应

证书结构

数字证书基本结构有3部分,tbsCertificate被签名证书、signatureAlgorithm签名算法、signatureValue签名值。

最主要tbsCertificate中包含如下字段
国标规定了四种证书格式:

  1. 自签名CA证书
  2. 二级CA证书
  3. 终端实体签名证书
  4. 终端实体加密证书

四种证书基本证书域一致,区别在于证书拓展域

基本证书域:
版本version:描述了编码证书的版本号
序列号serial number:CA分配给每个证书的一个正整数序列号,长度不超过20个8比特字节
签名算法signature:签名算法的OID
颁发者issuer:证书签发者信息
有效日期validity: 证书有效期,包括两个时间戳,一个证书生效时间、一个证书过期时间
主体subject: 终端(end entity/EE)信息
主体公钥信息subjectPublicKeyInfo: 包括公钥的算法、公钥值

自签名CA证书必须的扩展域:
subjectKeyIdentifier:主题密钥标识符,即公钥值的sha-1摘要
subjectInfoAccess: 指向CA证书位置的ldap或http地址
basicConstraints: 基本约束,其中ca字段为true,表示这是一张ca证书
keyUsage:证书用法,其中keyCertSign和CRLSign为true,表示此证书可以用作证书和CRL签发

下级CA证书必须的拓展域:
authorityKeyIdentifier: 签发者密钥标识符,即签发者公钥的SHA-1摘要值
subjectKeyIdentifier:主题密钥标识符,即公钥值的sha-1摘要值
basicConstraints: 基本约束,其中ca字段为true,表示这是一张ca证书
keyUsage: 证书用法,其中keyCertSign和CRLSign为true,表示此证书可以用作证书和CRL签发
crlDistributionPoints: crl签发点,采用ldap或http形式
certificatePolicies: 证书策略相关信息
authorityInfoAccess: 签发者证书访问地址,采用ldap或http形式,ocsp地址
subjectInfoAccess: 指向CA证书位置的ldap或http地址

终端实体签名证书必须的拓展项:
authorityKeyIdentifier: 签发者密钥标识符,即签发者公钥的SHA-1摘要值
subjectKeyIdentifier:主题密钥标识符,即公钥值的sha-1摘要值
keyUsage: 证书用法,其中digitalSignature和nonRepudiation为true,表示此证书可以用作数字签名和防抵赖
crlDistributionPoints: crl签发点,采用ldap或http形式
authorityInfoAccess: 签发者证书访问地址,采用ldap或http形式,ocsp地址

终端实体加密证书必须的拓展项:
authorityKeyIdentifier: 签发者密钥标识符,即签发者公钥的SHA-1摘要值
subjectKeyIdentifier:主题密钥标识符,即公钥值的sha-1摘要值
keyUsage: 证书用法,其中keyEncipherment、dataEncipherment、keyAgreement为true,表示此证书可以用作密钥加密、数据加密、密钥协商
crlDistributionPoints: crl签发点,采用ldap或http形式
authorityInfoAccess: 签发者证书访问地址,采用ldap或http形式,ocsp地址

CRL结构

数字证书基本结构有3部分,tbsCertList被签名的证书吊销列表、signatureAlgorithm签名算法、signatureValue签名值。

CRL基本域:
版本version:整数2
签发者信息issuer:CRL签发者信息
当次更新时间thisUpdate:更新此次CRL的时间
下次更新时间nextUpdate:下次更新CRL的时间
证书吊销列表revokedCertificates:吊销的证书列表,包含吊销原因,吊销时间等信息

CRL拓展域:
authorityKeyIdentifier:签发者公钥sha-1哈希值
issuerAltName: 签发者别名
CRLNumber: 单调递增序列
dataCRLIndicator:表明CRL是否是增量CRL,如果是增量CRL在baseCRLNumber字段中指出他是哪个全量CRL的增量
issuingDistributionPoint:表明CRL是否只包含了用户证书、CA证书,和撤销原因
freshestCRL: 在全量CRL中表明此字段,字段中放入最新的增量CRL信息

国标描述内容

GB/T 25056-2018 描述证书认证系统相关技术组件、技术规范
GB/T 29241-2012 描述了PKI互操作性评估准则,每一级PKI系统和PKI应用应具备什么条件,提供哪些服务
GB/T 19714-2005 描述了PKI体系中各角色的行为顺序,行为细节等信息
GB/T 20518-2018 描述数字证书、CRL的格式,文件中字段含义
GB/T 19713-2005 描述了OCSP协议的具体细节
GB/T 31508-2015 描述数字证书策略分级,每一级策略应该如何申请证书、撤销证书、证书权限范围是什么等

  • 57
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于go语言的crypto包 包含支持兼容国密的tls x509以及国密算法Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
国密(GM)是中国开发的一套密码算法标准,在网络通信和信息安全领域得到了广泛应用。TrustManagerFactory是Java中用于创建TrustManager的工厂类,通过调用它的getInstance方法可以创建对应的实例。 而“bc”则代表Bouncy Castle,是一个开源的密码算法库,提供了对国密算法的支持。所以,当我们调用TrustManagerFactory.getInstance("bc")时,就是在使用Bouncy Castle库来创建支持国密算法的TrustManager实例。 TrustManager是一个用于验证服务器证书的接口,它会对服务器证书进行验证,判断其是否可信。在进行SSL/TLS通信时,客户端会验证服务器证书,以确保通信双方的身份和保障通信过程的安全。 国密的TrustManagerFactory.getInstance("bc")会使用国密算法对服务器证书进行验证和授权,保障通信过程的安全性。具体实现代码如下: ``` TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("bc"); trustManagerFactory.init((KeyStore) null); TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); ``` 以上代码通过getInstance("bc")方法创建一个使用国密算法的TrustManagerFactory实例,然后调用init方法初始化,并通过getTrustManagers方法获取TrustManager数组。然后,我们可以将其设置到SSLContext中,进一步进行SSL/TLS通信的配置。 总的来说,TrustManagerFactory.getInstance("bc")可以用于创建支持国密算法的TrustManager实例,用于保障SSL/TLS通信过程的安全性。国密算法在信息安全领域具有重要作用,通过使用国密算法的TrustManagerFactory可以增强网络通信的安全性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码小飞飞飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值