密码学专题 openssl的基本概念

配置文件

  • 配置文件是OpenSSL的一个基础结构组件,OpenSSL使用一组称为OpenSSLCONF的函数来读取OpenSSL配置文件的信息。OpenSSL提供的主配置文件是opensl.cnf,它集成了OpenSSL所要使用的配置文件选项的大部分内容。此外,OpenSSL还提供了其他一些部分的配置文件,用于专门配置证书请求或者X.509v3证书的扩展项。
  • OpenSSL的配置文件使用字段的概念分成不同的部分。一般来说,每个字段的开始使用[Section_Name]来标识,直到下一个字段开始或者到达文件结尾为一个字段的结束。字段的名字可以由字符、数字或者下划线组成。需要注意的是,OpenSSL的第一个字段是比较特殊的,它不像其他的字段有名字和类似[Section_Name]的开头。OpenSSL第一个字段被设置为OpenSSL的默认字段,当OpenSSL CONF函数要读取配置文件数据的时候,首先会根据字段的名字去查找相应的字段,如果没有找到,则会定位到默认的字段,也即第一个字段。每个字段包含一组不定数量的变量名和值域数据对,它们的形式如下: 变量名 = 变量值
  • 支持 \n \r 等转义符号 
  • 使用双引号 引号内的空格不会被忽略;如果是 变量名 = 变量值的方式 ,变量值前面的空格会被忽略

  • 支持 变量值域还支持其他变量值的展开

  • 默认值一定要在变量展开之前定义,否则无效

  •  openssl.cnf是OpenSSL提供的主配置文件,它的结构和语法完全遵循上述介绍的OpenSSL配置文件的结构和语法。一般来说,它位于OpenSSL软件包的apps目录下,读者可以使用普通的文本浏览工具打开和编辑该文件。目前openssl.cnf用于req、ca和x509等指令中,所有使用openssl.cnf的指令,都是通过config选项来指定配置文件,如果你不指定,默认的就是openssl.cnf文件。
  • 当然,并非任何时候都能成功找到opensl.cnf文件,这取决于你是否合理编译和安装了OpenSSL。openssl.cnf文件的内容包括了三大部分:默认的文件配置、证书请求配置及证书签发配置。事实上,OpenSSL的配置文件应用远远不止于此,你甚至可以在使用OpenSSL函数库的时候使用这种方便的配置机制。在后面的章节中,你还会看到如何使用配置文件灵活配置X.509证书的扩展项。

配置文件中的通用变量配置

  • openssl.cnf文件配置了一些可能用到的通用变量,这些变量数量很少,基本上都是位于openssl.cnf文件的主字段部分即默认字段部分

随机数默认文件

HOME=.
RANDFILE=$ENV::HOME/.rnd
  • RANDFILE变量是用来设置可能用到的随机数文件,这个文件通常用作生成随机数的种子文件。随机数在密码学中具有重要的意义,通常,随机数的好坏可以对密钥的安全性产生很大的影响。大家可以看到,在RANDFILE变量之前还定义了HOME变量,这主要就是为了防止环境变量ENV中不存在HOME变量(如Windows系统)的时候可能导致的错误

扩展对象的定义

  • 扩展对象定义有时候可能要使用一些扩展对象定义,比如在使用X.509证书的扩展项的时候,这些扩展项的对象可能在OpenSSL中并没有进行定义,那么就要对扩展对象进行定义。对扩展对象的定义通常包含三个部分:对象数字形式的OID、对象简称和对象详细描述
  • OpenSSL以两种方式定义扩展对象:扩展对象文件方式在配置文件中使用特定字段方式
  • 扩展对象文件的指定使用OpenSSL默认字段中的oid_file变量,形如下面的格式:
  • oid_file = $ENV::HOME/.oid
  • 打开openssl.cnf文件可以看到,在默认的openssl.cnf文件中,该语句是被注释掉的。
  • 其中的.oid即为扩展对象定义文件
  • 扩展对象定义文件每一行定义一个对象,格式一般如下:

  • 扩展对象还可以在配置文件中的一个字段中定义,这个特定的字段通过oid_section变量来指定,变量值为字段名。其格式如下: 
  • oid_section = new_section
  • 读者从默认的openssl.cnf中可以看到,其没有定义任何扩展对象,如果要使用扩展对象,读者可以参照上面的方法自己定义新的对象。
  • 扩展对象字段的变量对通常由扩展对象简称和扩展对象OID组成,在这种方式中,扩展对象详细描述跟扩展对象简称是相同的,下面是一个扩展对象使用字段定义的例子:
[new_section]
oid_ext1 = 2.99999.1
oid_ext2 = 2.99999.2

配置文件中的证书请求配置

  • (1)证书请求主配置字段在申请证书之前,通常要生成符合PKCS#10标准的证书请求封装格式。
  • OpenSSL的req指令实现了产生证书请求的功能,其相关选项的信息就采用OpenSSL配置文件来进行设置。
  • OpenSSL中证书请求的配置分成几个字段,包括一个基本字段和几个附属的字段。OpenSSL配置文件中名为req的字段是证书配置请求的基本字段也是使用证书请求配置的入口,而其他附属字段都是以这个字段作为引导的。目前,默认openssl.cnf文件证书请求配置字段已有的选项如下。
[req]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca
input_password = secret
output_password = secret
string_mask = nombstr
req_extensions = v3_req
  • 上述选项并非所有都使用了,比如input_password和output_password就已经被注释。
  • 因为req指令还可以生成RSA密钥对,所以default_bits选项指定了默认生成密钥的长度,default_keyfile则指定了默认的私钥输出保存文件
  • input_password和output_password分别提供了默认的输入私钥保护口令和输出私钥保护口令。
  • string_mask选项则是设定了证书请求的信息字段的字符串类型。
  • distinguished_name,attributes,x509_extensions和req_extensions的值域都是字段名,指定了包含相应信息的字段名字。事实上,与证书请求相关的配置文件选项远远不止这些,如表所示列出了OpenSSL配置文件中目前支持的证书请求参数及其意义,这些参数基本上跟req指令中同名的参数选项作用是相同的,通常如果req指令设置了同名选项,则配置文件的默认值将不会被使用,否则就使用配置文件的默认值

  • 从表可以看到,虽然证书请求字段支持oid_file,oid_section及RANDFILE等参数,但是默认的opensl.cnf文件并没有这些选项,根据使用OpenSSL配置文件的规则,配置文件的读取函数将使用主字段也就是配置文件默认字段中同名的参数。

(2)特征名称字段

  • 特征名称字段由req字段中的distinguished_name指定,它包含了用户的主要信息,如国家、省份、城市、组织及名字等信息,如果两个证书的特征名称字段所有参数值都相同,一般就可以看成是同一个用户,所以该字段所有信息的总和称为“特征名称”。特征名称字段允许的变量名可以是任何对象的简称或详细描述名称。
  • 有些对象在OpenSSL里面已经编译进去,比如commonName,countryName,localityName,organi-zationName,organizationUnitName和stateOrPrivinceName。此外,emailAddres,name,surname,givenName,initials和dnQualifier等也在OpenSSL里面做了定义。
  • 特征名称字段还可以包含自定义的扩展对象名,这些扩展对象可以在扩展对象文件(oid_file)或者扩展对象字段(oid_section)中定义
  • 一般来说,扩展对象的值类型都被默认为是DirectoryString。
  • 根据证书请求配置字段中变量prompt的值的变化,特征名称字段变量定义的格式有两种。如果prompt的值设为no,那么特征字段中每个条目只是简单包含了变量名和对应的变量值,通常有如下形式:
CN = My Name
OU = My Organiaztion
emailAddress = someone@somewhere.org
  • 在这种情况下,不会要求用户再输入这些对象的域值,而只是简单地将配置文件中相应的值复制过去。
  • 相反,如果prompt没有定义或者其值没有设置为no,那么特征名称字段一个变量域的属性就会包含输入信息的属性,一般包含了类似下面的格式: 
filedName = "prompt"
filedName_default = "default filed vlaue"
filedName_min = 2
filedName_max = 4
  • 其中,fieldName是对象的简称或者详细描述,如CN或者commonName。
  • “prompt”是要求用户输入变量值的时候显示的提示信息;
  • fieldName_default的值定义的是默认的变量值;
  • fieldName_min和fieldName_max定义了变量值字符串最小的长度和最大的长度。
  • 事实上,这四个项目除了第一个,其他都是可选的。对一个变量来说,用户如果没有输入任何信息,会使用默认的变量值;如果定义了默认变量值但是用户输入了“.”号,该变量域就会被忽略和取消,不会被包含在证书请求中;如果用户没有输入任何信息,也没有在配置文件定义默认值,那么该变量域也会被忽略和取消。
  • 输入的变量值字符串的长度必须在配置文件定义的最小长度和最大长度之间,这给一些变量值做了额外的限制,比如国家(C),其值一般就定义为2个字符串。那么如果输入的值不是两个字符串长度,就会被拒绝接受。有些变量,比如organizationName,在特征名称字段可能会不止一个,但是,OpenSSL的配置文件只会加载同名变量的最后一个变量。为了避免这种情况可能导致的数据丢失,OpenSSL规定了在特征名称字段中,如果字符后面跟着点号(“.”),那么该字符就被忽略。比如a.fieldName和b.fieldName在OpenSSL中都认为是名为fieldName的对象。这样,就可以将相同变量名出现多次的情况区别开来,而不会因为相同被OpenSSL配置文件的读取函数忽略,从而保证多个变量值的情况能够被正确输入到证书请求的特征名称中。例如对于有两个organizationName变量的情况,可以使用如下的格式:0.organizationName  1.organizationName

(3)证书请求属性字段

  • 证书请求属性字段由req字段中的atributes变量指定,它定义了一些在CA签发证书的时候可能用到的属性值,现在典型的应用字段是challengePassword和unstructured-Name。chalengePasword一般是在用户获取CA签发的证书的时候验证用户时使用的,而unstructuredName则是一个可选的别名。这些属性目前对于OpenSSL的应用程序来说都被忽略了,但是有些CA是要求这些属性的。证书请求属性字段的格式跟特征名称字段的格式相同,也会受到prompt的值的影响,使用方法可以参考特征名称字段的格式介绍。

(4)证书请求扩展字段

  • 证书请求扩展字段由req字段中的req_extensions变量指定,它定义了要加入到证书请求中的扩展项。该字段的格式跟证书扩展字段的格式基本是一致的,目前主要用来定义X.509v3的扩展项。

配置文件中的证书签发配置

  • (1)CA主配置字段配置文件中CA主配置字段设置了OpenSSL的CA指令默认的选项值,对CA指令的行为有很大的影响。不过,CA主配置字段并不是OpenSSL配置文件中名为“ca”的字段,ca字段只是通过default_ca变量给OpenSSL应用程序提供了CA主配置字段的入口,即告诉CA指令配置文件中哪个字段是用作CA主配置字段,比如在默认的opensl.cnf文件中,CA主配置字段就是CA_default字段。当然,应用程序(如CA指令)也可以通过自己的选项.name来选择CA主配置字段。
  • CA主配置字段的信息主要包括CA指令配置文件、CA签发证书的限制和策略,以及指定CA扩展项字段。一个相对比较完整的CA主配置字段看起来如下。

  • 一个实际的 CA 主配置字段,不一定要出现所有这些变量。这些变量的作用跟同名应用指令的选项的作用经常是一样的,但是指令选项的优先级一般来说比配置文件的要高。

  • 如表所示是目前支持的CA主配置字段参数

 

  • 表中,oid_file和oid_section参数一般都不会出现在CA主配置字段中,也就是说,一般都使用配置文件默认字段中的oid_file和oid_section的值。default_startdate和default_enddate的格式是YYMMDDHHMMSSZ,是UTCTime结构,表示的是标准的格林威治时间。各个位的意义如表所示。比如2003年8月6日上午9时30分44秒,则表示为:030806093044Z。 

 (2)请求信息匹配策略字段

  • 证书请求信息的匹配策略字段由CA主配置字段的policy参数指定。该字段包含了一组跟证书特征名称(DN)域相关的变量。变量的名称是DN域对象的名称,变量值可能为optoinal,supplied或match。下面是一个匹配策略字段的实例: 
[policy_match]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationUnitName = optional
commonName = supplied
emailAddress = optional
  • 如果在匹配字段中一个变量的值是match,那么,该变量在证书请求中的值必须跟CA证书相应的变量值完全相同,否则就会被拒绝签发,比如上述的conutryName的匹配策略是match,那么如果CA证书的countryName(C)是“CN”,那么证书请求中的countryName就也必须要求是“CN”。
  • 如果在匹配策略字段中一个变量的值是supplied,那么证书请求中必须提供该变量值,否则也会被拒绝签发,但是变量值可以不同
  • 如果在匹配策略字段中一个变量的值是optional,那么证书请求中可以提供该变量,也可以没有该变量。一般来说,如果证书请求DN域中出现了证书请求匹配策略中没有的变量,签发证书的时候会被自动删除。但是,如果使用了preserve选项并设置其值为yes,或者在CA指令中使用了-preserveDN选项,则匹配策略中没有的变量也会被保留下来。

(3)扩展项字段

  • CA主字段中包含了两个指向扩展项字段的变量:x509_extensions和crl_extensions,它们都指向一个包括了X509v3证书扩展项信息的字段,从格式和本质上来说,它们都是统一的,都是为了添加X509v3证书扩展项功能的。与此相同的还有证书请求配置中的req_extensions变量指向的证书请求扩展字段。

配置文件中X.509v3证书扩展项

1.扩展项字段应用概述

  • X.509v3证书已经得到了广泛应用,其最大的特色就是增加了扩展项的支持。在OpenSSL中,除了可以在指令中使用参数来指定扩展项的配置,更通常使用的是在配置文件中配置扩展项的各个参数。
  • X.509v3扩展项不仅仅可以添加到证书中,也可以添加到证书请求和证书吊销列表(CRL)中。在OpenSSL配置文件中,针对不同的应用,有不同的X.509v3扩展项字段的入口。如果要在使用ca指令的时候添加证书扩展项字段,那么应该使用CA主配置字段的x509_extensions变量;
  • 如果要在证书请求中添加证书扩展项字段,那么就应该使用证书请求配置主字段的req_extensions变量;如果要在CRL中添加证书扩展项,那么就应该使用CA主配置字段的crl_extensions变量。此外,OpenSSL的x509指令使用的证书扩展项字段是以配置文件默认字段的extensions变量为入口的,而证书请求配置主字段的x509_extensions变量则为使用req指令签发自签名证书提供了扩展项字段的入口。

2.扩展项字段变量的格式

  • 扩展项字段的变量的格式是相同的,都具备如下的基本格式
  • extension_name = [critiacl, ] extension_options
  • 上述的critical是可选的,一旦变量标记为critical,即标记该选项为关键选项,那么要求就会非常严格。理论上,任何客户端一旦不能理解标记了critical的扩展项就应该将该证书视为无效,所以在使用critical的时候要非常谨慎。有些不规范的软件甚至会将任何包含了critical标记的证书都视为无效。

扩展项有三种基本的类型:字符串扩展项、多值扩展项和原始扩展项。

  • 字符串扩展项很简单,它的值域仅仅包含一个字符串作为值或者作为行为方式的描述,比如: nsComment = "This is a Comment"
  • 多值扩展项有两种方式:短型和长型。短型的多值扩展项值域是一系列名字和对应值的列表,中间用逗号隔开,而名字和值中间使用“:”隔开,比如:
  • basicContraints = critical,CA:true,pathlen:1
  • 长型的多值扩展项允许将真正的值域放置在单独的字段中,比如上述的变量,也可以写成如下的形式:
basicContraints = critical,@bs_section
[bs_section]
CA = true
pathlen = 1
  • 短型的多值扩展项和长型的多值扩展项是完全等价的,使用任何一种都可以。但是, 有时候值域里面一个变量会出现两次,这种情况下对长型的多值扩展项就需要做一些处 理。比如下面的多值扩展项变量:
  • subjectAltName = email:dragonking@here,email:dragonking@there
  • 值域中email变量出现了两次,如果用长型的多值扩展项方式表示,就不能简单把它们列举成:
subjectAltName = @alt_section
[alt_section]
email = dragonking@here
email = dragonking@there
  • 如果以上述的方式表示,那么alt_section字段的第一个email变量就会被OpenSSL的配置文件读取函数忽略,因为根据OpenSSL的规则,同一字段出现同名变量,那么就只有最后一个有效。所以为了避免这种请求,通常我们采取下面的形式:
subjectAltName = @alt_section
[alt_section]
email.0 = dragonking@here
email.1 = dragonking@there
  • 这样,我们就能保证同名变量的所有信息都能正确加入到证书相应的域中。原始扩展项顾名思义,它采用了原始的数据(如对象的OID)而不是可读数据来表示变量名或变量值,该方式也支持多个值,中间可以用“,”分开。这种方式的使用应该要非常谨慎,否则就可能导致无效的变量对象声明。
  • 比如:certificatePolicies = 1.2.3.5,1.1.3.4
  • 甚至还可以在变量域中使用DER编码的特定对象OID,这需要通过DER标识来声明,
  • 比如:certificatePolicies = 1.2.3.5,1.1.3.4
  • DER后面的数据是经过DER编码并使用十六进制表示的对象OID,除非不得已而为之,否则难以令人理解

3,扩展项字段变量种类

  • X.509v3证书的扩展项的主要目的是为了能够对证书和其相关私钥的用途和使用方法做出限制,从而提高证书的可管理性。
  • 下面将以分类的方式来介绍目前支持的扩展项变量,这些变量名称如果是“ns××××”的形式,则一般是Netscape定义的扩展项,而不是这个形式的则一般是PKIX定义的扩展项。
  • 表格列出了目前OpenSSL配置文件支持的扩展项。事实上,这里列出的扩展项只是OpenSSL支持的在配置文件中设置的选项,并不是OpenSSL支持的扩展项的全部,有些选项OpenSSL是支持显示的,但是并不能在配置文件中设置,比如私钥使用周期、CRL序列号和CRL说明等。

 

(1)描述字符串型的扩展项

  • 这种类型的扩展项变量直接使用一个字符串给变量赋值,这样的扩展项变量包括:nsBaseUrl,nsRevocationUrl,nsCaRevocationUrl,nsRenewalUrl,nsCaPolicyUrl,nsSslServerName和nsComment。这些扩展项从名字可以知道,基本上是给出了一些跟证书相关的URL的信息,这些扩展项都是Netscape定义的。不过,目前很多证书实际上并没有使用这些选项。下面是一个这种扩展项在配置文件中的例子: 
  • nsComment = "DragonKing Generated Certificate"

(2)证书类型(nsCertType)扩展项

  • nsCertType是Netscape定义的指定证书用途的扩展项,它可选的值包括:client,server,email,objsign,reserved,slCA,emailCA和objCA。
  • nsCertType值域可以为这些值的一个或者多个。这些值所代表的意义如表所示。

  • 例如,如果要签发一个只用来签名的用户证书,那么nsCertType设置应该如下: NsCertType = objsign
  • 如果要签发的是一个普通用户证书,并且是用于服务器端的,可以将nsCertType的值设置如下: nsCertType = objsign,email,server
  • 如果你要使用的是一个CA证书,并且该CA证书可以用来签发任何用途的证书,那么你的定义应该如下: nsCertType = objCA,emailCA,sslCA

(3)密钥用途(keyUsage)扩展项

  • keyUsage是PKIX定义的用于限制证书中密钥用途的扩展项
  • 事实上,它跟nsCertType的功能基本上是相同的,都是为了限制证书用途。
  • keyUsage可选值包括:digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment,keyAgrement,keyCertSign,cRLSign,encipherOnly和decipherOnly。
  • keyUsage的值可以为上述值的一个或者多个,值域中各个参数的意义详见表

  • 例如,如果要指定证书中的密钥只能用来进行加密操作,并且标记该扩展项为关键扩展项,则设置应该如下:
  • keyUsage = critical,keyEncipherment,encipherOnly

(4)基本限制(basicConstraints)扩展项

  • basicConstraints是PKIX定义的证书扩展项,在OpenSSL配置文件中,它是一个多值型扩展项,它的值域包括两部分:CA参数和pathlen参数。
  • CA参数的值为TURE或者FALSE,如果CA参数值为TRUE,指明该证书是一个CA证书,即可以用来签发别的证书的证书;
  • 如果CA的值为FALSE,那么表示证书是一个最终用户证书,不能作为CA证书。下面的配置表明是一个CA证书: 
  • basicConstraints = CA:TRUE
  • pathlen参数值是整数,只对CA证书有效,也就是说,只有CA值为TRUE的时候才有效。它指明了从该CA开始下面还可以出现多少级CA证书。所以,如果你设定一个CA 证 书 的 pathlen 为 0, 设置如下 : basicConstraints = CA:TRUE,pathlen = 0   那么表明该CA证书只能签发最终用户证书而不能签发更低级别的CA证书。
  • PKIX规定该扩展项必须标记为关键选项,当然,你理论上也可以不这样做。有效的CA证书一般应该标记为CA值为TRUE,而最终用户证书CA值一定不能设置为TRUE,否则就很容易导致混乱。
  • 下面的例子是一个标记该扩展项为关键扩展项的最终用户配置例子:basicConstraints = critical,CA:FALSE

(5)扩展密钥(extendedKeyUsage)扩展项

  • extendedKeyUsage允许用户添加额外的密钥应用信息,用户可将自己定义的对象和相应的信息添加到extendedKeyUsage列表中。extenedKeyUsage的值域是多个代表特定意义的数据对象的列表,可以为对象的简称,也可以为对象的数字形式OID。
  • 目前PKIX,Netscape和Microsoft都定义了自己的扩展密钥扩展对象,在表中列出了OpenSSL目前支持的扩展对象。
  • 下面是两个使用extendedKeyUsage扩展项的例子
  • extendedKeyUsage = critical,codsSigning,1.2.3.4
  • extendedKeyUsage = nsSGC,msSGC

(6)主体密钥标识(subjectKeyIdentifier)扩展项

  • 主体密钥标识用于在证书主体拥有多个密钥集的时候指定密钥属于哪个密钥集。subjectKeyIdentifier参数值目前有两种,一种是以十六进制字符串的方式直接给定主体密钥标识,这种方式现在基本上不使用了;另外一种是给定值hash,这样,就会根据PKIX的规定生成合适的主体密钥标识,如下面的例子: 

  • subjectKeyIdentifier = hash

(7)验证机构密钥标识(authorityKeyIdentifier)扩展项

  • 验证机构密钥标识用于构造证书链的时候标识签发机构的证书和密钥,证书中的验证机构密钥标识包括三个部分:密钥ID(keyID)、验证机构DN和CA证书序列号
  • KeyID在验证机构使用多对密钥的时候能起到区别的作用。在OpenSSL中,authorityKeyIdentifier扩展项的参数值域有两个:keyid和issure,两个参数都可选的取值为“always”。下面是一些应用形式:
  • authorityKeyIdentifier = keyid,issure:always
  • authorityKeyIdentifier = keyid:always
  • 如果给定keyid,那么CA签发证书的时候就会复制CA证书的主体密钥标识到新签发的证书中,如果keyid取值always,则复制失败的时候就拒绝签发证书。
  • 给定issure将告诉CA签发证书的时候复制CA证书的DN和序列号到新签发证书中,一般来说,虽然给定了issure值,但是只有keyid出显但复制主体密钥失败或者keyid没有给定的情况下才会执行CA证书的DN和序列号的复制操作。
  • 如果isure给定了always值,则不论在什么请求下都执行其定义操作。

(8)主体别名(subjectAltName)扩展项

  • 主体别名为证书提供了形式更加灵活的命名方式,理论上可以包含IP地址、URL、电子邮件及域名等信息作为主体别名。目前,就OpenSSL来说,在配置文件中支持的值包括:email(E-mail地址),URL(全球资源定位地址),DNS(DNS域名),RID(已注册对象标识)和IP(IP地址)。下面是一些OpenSSL配置文件中赋值的例子:

  • 此外,email参数还有一个特殊的值“copy”,如果设置了该值,就会自动把证书主体中包含的Email地址复制到证书扩展项中。其使用方式如下:
  • subjectAltName = email:copy,email:my@OpenSSL. cn,URL:http://OpenSSL.cn

(9)颁发者别名(isuerAltName)扩展项

  • 颁发者别名扩展项为颁发者的证书提供了不同形式的命名方式,它采用的形式跟上述的主体别名基本一致。OpenSSL配置文件中的issureAltName支持subjectAltName的所有参数,但是不支持email参数的copy值。issureAltName还支持issure:copy选项,如果该选项设置了,那么证书颁发者主体别名中所有别名都会被复制到新签发证书的颁发者别名扩展项中。
  • 下面是使用issure:copy选项的例子: issureAltName = issuer:copy

(10)验证机构信息处理(authorityInfoAces)扩展项

  • 验证机构信息处理扩展项给出了如何处理跟CA相关的信息的详细细节。在OpenSSL配置文件中,其基本格式如下
  • accessOID;location
  • location可以是主体别名中除了email:copy参数外的所有形式。accessOID理论上可以为任何有效的对象标识,但是,目前有具体意义的仅仅是OCSP和caIsures。OCSP表示在指定的location中作为OCSP响应服务器;caIsures则表示CA的地址。下面是两个应用例子:

(11)CRL分布点(crlDistributionPoints)扩展项

  • CRL分布点扩展项用于指明用户为了验证证书吊销状态而需要查找CRL信息的发布站点。目前来说,OpenSSL的配置文件仅支持CRL分布点中的URL参数,而对于PKIX中规定的cRLIsuer和撤销原因暂时还不支持。
  • crlDistributionPoints可以有多个URL参数,是一个多值型的扩展项。下面是crlDistributionPoints扩展项在OpenSSL配置文件中使用的两个例子: 

(12)证书策略(certificatePolicies)扩展项

  • 证书策略扩展项定义了证书应用的策略,比如用于证书验证的策略。证书策略扩展项目前使用并不多,支持的软件也很少。在OpenSSL配置文件中,certificatePolicies是一种原始型的扩展项,其值域一般来说是原始的对象数字标识的列表,中间可以用逗号分开。
  • 下面是一个简单的例子:  certificatePolicies = 1.2.4.5,1.1.3.4
  • 证书扩展策略除了支持对象标识符,还支持限定符,但是,在OpenSSL中,如果要使用限定符,那么就不能直接在certificatePolicies的值域中添加,而要使用单独的字段,看起来如下面的形式:下面是一个简单的例子:  certificatePolicies = 1.2.4.5,1.1.3.4 @policy
  • 目前来说,OpenSSL配置文件支持的证书扩展策略限定符有CPS(验证操作规范)和userNotice。CPS给定了验证操作规范的URL地址,而userNotice则包含了通知用户的一些扩展信息。一个包含了证书扩展策略限定符的字段必须使用policyIdentifier参数指明对象标识(OID)。
  • 通常来说,CPS参数使用下面的表达形式: CPS.nnn = value
  • 其中,nnn为非负整数,这样可以允许加入多个CPS地址。
  • userNotice限定符本身又包含了explicitText,organization和noticeNumbers三个限定符选项,所以也要使用单独的userNotice限定符字段来给赋值,通常一个userNotice的值这样表示: userNotice = @section
  • 其中section为userNotice的限定符字段。explicitText和organization的值都是文本形式的,而noticeNumbers的值则是一系列数字的列表。需要注意的是,organization和noticeNumbers两个值在OpenSSL配置文件中是必须同时出现的,不能单独出现其中一个而没有给出另一个。下面是一个相对完整的证书策略扩展字段的例子:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

该工程中的宏被禁止_建筑劳务分包都能承担什么工程

来源:找法网建筑工程的承包单位,也就是总承包单位可以将部分建造工程分包给具有资质的施工单位,这是法律所允许的,但是禁止将建造工程进行转包。一、建筑劳务分包都能承担什么工程建筑劳务分包能承担什么工程要看分包单位的资质&a…

matlab用辛普森公式求积分_积分近似计算之辛普森公式

对于积分区间[a, b],若则成立辛普森公式辛普森公式可看作是改良的梯形公式。梯形公式是以直线逼近实际曲线,而辛普森公式则以二次曲线(即抛物线)逼近。以二次曲线逼近实际曲线根据辛普森公式可得各积分小区间内的积分值如下式所示:其中于是&a…

密码学专题 文件编码格式

OpenSSL中虽然使用PEM作为基本的文件编码格式,但是,由于不同的对象其封装的标准格式不太一样,所以经常会导致读者产生迷惑。此外,OpenSSL也支持DER编码和过时的Netscape编码格式(NET)OpenSSL的编码是基于ASN.1标准的,A…

echarts 折线图 设置y轴最小刻度_【硬货】vue全家桶+Echarts+百度地图,搭建数据可视化系统...

作者丨夙言来源丨前端大牛爱好者(Web-2017)https://segmentfault.com/a/1190000018993981本文章篇幅略长,内容有点多,大佬可根据目录选择性查阅,新人可一步步来阅读。1、 前言1.1 业务场景突然接到产品说要做一个数据监控的系统。有线图、柱状…

密码学专题 文本数据库

应用概述 文本数据库是跟OpenSSL的CA应用程序紧密结合在一起的,它以文本的方式记录CA已经签发的证书的状态和摘要信息。这些状态信息可以用于跟证书库相关的一些操作,比如使用ca指令生成CRL主要就是读取这个文本数据库的信息作为参考。文本数据库就是普…

Python学习13 异常处理机制

概括 常见的异常 异常处理机制 可以多个异常放在元组里面 一旦产生异常,try后面的语句不会继续执行,会做异常处理 异常使用场景1 close应该放在finally中 异常使用场景2 finally关键字 会执行except后面的,报错

java 布隆过滤器_牛逼哄哄的布隆过滤器,到底有什么用?

Java技术栈www.javastack.cn打开网站看更多优质文章作者:CodeBear的园子www.cnblogs.com/CodeBear/p/10911177.html本文是站在小白的角度去讨论布隆过滤器,如果你是科班出身,或者比较聪明,又或者真正想完全搞懂布隆过滤器的可以移…

Java web后端6 java Bean EL表达式

EL表达式和JSTL概述 java Bean规范 java中成员变量使用类Integer private Integer count; java Bean的创建 创建java Bean: BookTest.java package com.example.elandjstl.bean;public class BookTest {//java中成员变量使用类Integerprivate Integer count;private Boolean…

python根须系统斜杠_深入浅出Python中的os模块

「Author:Runsen」当初学Python的时候,把一些标准库和第三方开源库学的七零八落,不成系统,正好趁这个机会来系统的整理一下,先从Python常用的标准库os开始吧。osOS模块简单的来说它是一个Python的系统编程的操作模块&a…

Java web后端7JSTL

概括 下载jstl的jar包 官网&#xff1a;https://mvnrepository.com/ 网址1&#xff1a;https://search.maven.org/ 在pomxml中插入依赖&#xff1a; <dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1…

Python学习14 模块和包

模块 公共类、函数都可以放在独立的文件中&#xff0c;这样其他多个程序都可以使用&#xff0c;而不必把这些公共性的类、函数等在每个程序中复制一份&#xff0c;这样独立的文件就叫做模块&#xff0c;它们的扩展名为.py 标准库中的模块 使用help查看模块 代码&#xff1a; …

python语句分为_python以什么划分语句块

语句块是在条件为真&#xff08;条件语句&#xff09;时执行或者执行多次&#xff08;循环语句&#xff09;的一组语句&#xff1b;在代码前放置空格来缩进语句即可创建语句块&#xff0c;语句块中的每行必须是同样的缩进量&#xff1b;&#xff08;推荐学习&#xff1a;Python…

Python学习15 正则表达式1

网址 正则表达式测试网址&#xff1a;https://regex101.com/ 概述 正则表达式&#xff1a; 正则表达式(Regular Expression)是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&#xff08;称为"元字符"…

STL源码剖析 空间配置器 查漏补缺

ptrdiff_t含义 减去两个指针的结果的带符号整数类型ptrdiff_t (Type support) - C 中文开发手册 - 开发者手册 - 云社区 - 腾讯云 std::set_new_handler&#xff08;&#xff09;函数的理解 关于set_new_handler的理解_wck0617-CSDN博客new分配内存的时候 如果分配的空间不…

Python学习16 正则表达式2 re模块

re 模块 re 模块&#xff1a; Python的 re 模块实现了正则表达式处理的功能。 导入re模块后&#xff0c;使用findall、search函数可以进行匹配 查找&#xff1a;match和search 多个匹配上的&#xff0c;也只会返回第一个匹配上的 re.match()&#xff1a; 需要特别注意的是&…

STL源码剖析 内存基本处理工具 初始化空间的五个函数

初始化空间的五个函数构造函数 construct()析构函数 destroy()剩余三个底层函数 和 高层函数之间的对应关系如下uninitialized_copy() 对应 copy()uninitialized_fill() 对应 fill()uninitialized_fill_n() 对应 fill_n()使用<memory>使用上述三个底层函数 uninitiali…

单基因gsea_筛到5分的核心基因以后你可以怎么做?

这一次我们从一些已经发表的文章拆解&#xff0c;我们来看看&#xff0c;你找到了一个核心基因以后&#xff0c;你可以怎么做呢&#xff1f;我们就不说那么多废话了&#xff0c;直接用几篇文章的解读来带着大家领会一下如何去进行下一步的分析。Case1&#xff1a;预后标志物免疫…

STL源码剖析 迭代器的概念和traits编程技法

迭代器&#xff1a;依序巡防某个聚合物(容器)所含的各个元素&#xff0c;但是不需要暴露这个聚合物的内部表述方式核心思想&#xff1a;将容器和算法分开&#xff0c;彼此独立设计容器和算法的泛型化&#xff0c;均可以使用模板&#xff0c;使用迭代器连接容器和算法例子 templ…

STL源码剖析 5中迭代器型别

最常使用的5种迭代器的型别 为 value_type、difference_type、pointer、reference、iterator_category。如果想要自己开发的容器和STL进行适配&#xff0c;就需要定义上述5种类型 iteraor_traits 必须针对传入的型别为 pointer 或者 pointer-to-const设计偏特化版本 template &…

加载tf模型 正确率很低_深度学习模型训练全流程!

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习&#xff0c;不错过Datawhale干货 作者&#xff1a;黄星源、奉现&#xff0c;Datawhale优秀学习者本文从构建数据验证集、模型训练、模型加载和模型调参四个部分对深度学习中模型训练的全流程进行讲解。一个成…