• 06.Openssl基本概念


    6.1 配置文件
    openssl的许多应用程序和函数使用配置文件获取默认的信息和选项,所以,要使用Opnessl,尤其使用openssl的指令。
    6.1.1 配置文件概述
    openssl提供的主要配置文件是openssl.cnf,他集成了openssl所要的配置文件选项的大部分内容。
    使用形式:变量名=变量值
    注意事项:
    a.变量值域可支持由""或者需要用其他引用符号声明的特殊字符,如果“"符号需要这样声明:""。此外,变量值域还支持在行末尾使用""作为连接符号来使得可以使用多行数据作为一个值域。
    例如:“ ” “ ”
    b.变量值域还支持其他变量值的展开。使用"$变量名"或者“${变量名}的形式”,可以展开当前字段名为
    例如:
    dir=./demoCA
    certs=$./demoCA/certs
    <=>certs=./demoCA/certs
    c.如要展开其他字段的变量值,则可以使用"$字段名::变量名"或者“$字段名::变量名}”的形式
    [Section1]
    home = /home
    [Section2]
    dir = ${Sention1::home}/dragonking
    =>dir =/home/dragonking
    e.openssl的配置文件中,“#”为注释符号
    f.使用-config选项来指定配置文件,默认的就是openssl.cnf文件。
    6.1.3 配置文件中的证书请求配置
    a.证书请求主配置字段
    参数
    参数值域
    参数作用描述
    default_bits
    生成的证书中的密钥对的长度
    default_keyfile
    文件名
    生成私钥的输出保存文件
    input_password
    字符串
    当要读取输入私钥文件时候的口令
    output_password
    字符串
    保存输出私钥文件的口令
    oid_file
    文件名
    定义扩展对象的文件名
    oid_section
    字段名
    定义扩展对象的字段名
    RANDFILE
    文件名
    随机数种子文件
    encrypt_key
    yes或no
    如果该参数值设置为no,
    那么生成的你要将不会采用加密保护
    default_md
    md5
    sha1
    md2
    mdc2
    定义签名使用的信息摘要算法,默认是MD5
    string_mask
    字符类型描述名
    为一些字段制定特定字符串类型,
    比如证书请求中的城市和组织名称等字段就可以使用这样的方法制定,
    这使得证书可以支持如汉字这样的多字节字符
    default
    PrintableString,T61String和BMPString三种类型
    pkix
    定义包括PrintableString和BMPString两种字符串类型
    utf8only
    只是用UTFString类型
    nombstr
    仅使用PrintableString和T61String,
    不使用多字节的字符串类型
    req_extensions
    字段名
    指定了证书请求扩展字段名,
    这个字段定义了要加入到证书请求中的一系列扩展项
    x509_extensions
    字段名
    指定了生成字签名证书时要使用证书扩展项字段,
    该字段定义了一系列要加入到证书中的扩展项
    prompt
    yes或no
    如果该值设定为no,
    那么req指令不会在要求用户输入一些证书字段的信息,
    而是直接从配置问价读取该字段的值。
    utf8
    yes或no
    如果设置为yes,
    那么任何证书域要输入的值被解析成UTF8格式的字符串,
    而默认的情况下使用是ASCII编码。
    atrributes
    字段名
    指定了定义证书请求属性的字段名,
    这个字段定义了证书请求的一些属性,
    典型的如验证密码和别名,在Openssl的证书签发工具中,
    这些属性是没有用的,但是有些CA会要求这些属性。
    该字段定义变量的格式跟distinguished_name字段的格式是一样的,
    都会受到Promppt的值影响
    distinguished_name
    字段名
    定义了输入用户信息选项的特征名称字段名,
    该字段包含了多想用户信息项。
    b.特征名称字段
    c.证书请求属性字段
    d.证书请求扩展字段
    6.1.4 配置文件中的证书签发配置
    a.CA主配置字段
    参数名
    参数值域
    参数作用描述
    oid_file
    文件名
    定义扩展对象的文件名
    oid_section
    字段名
    定义扩展对象的字段名
    new_certs_dir
    目录名
    存放CA指令签发生成新证书的目录,
    该参数是必须提供的
    certificate
    文件名
    存放CA证书文件,改参数是必须提供的
    private_key
    文件名
    存放CA私钥的文件,改参数是必须提供的
    RANDFILE
    文件名
    用于读写随机数种子的文件,也可以是一个EGD socket
    default_days
    正整数
    签发证书的有效期,以天威单位
    defualt_startdate
    时间格式
    证书失效的日期,格式为YYMMDDHHNNSSZ,该选项没有设置,
    则使用当前时间间隔,在生成CRL的时候,
    该选项和default_crl_days参数必须有一个
    default_enddate
    时间格式
    证书失效的日期,格式为YYMMDDHHNNSSZ,
    该选项和default_days,选项至少应该有一个
    default_crl_hours
    正整数
    从当前CRL到下次CRL发布以消失为单位的时间间隔,
    在生成CRL的时候,该选项和defualt_crl_days参数必须有一个
    default_crl_days
    正整数
    从当前CRL到下次CRL发布以天威单位的时间间隔,
    在生成CRL的时候,该选项和default_crl_hours参数必须有一个
    default_md
    md5
    md2
    mdc2
    sha1
    签发证书时采用的信息摘要算法,
    选定的信息摘要算法也用于CRL的签发
    database
    文件名
    Openssl定义的用于以签发证书的文本数据库文件,
    这个文件通常初始化的时候是空文件,但是确实必须提供的参数
    serialfile
    文件名
    证书签发时使用的序列号参考文件,
    该文件的序列号是以十六进制的格式存放的,
    该文件必须提供并且应该包含一个有效的序列号
    x509_extensions
    字段名
    指定了生成自签名证书时要使用的证书扩展项字段,
    该字段定义了一些列要加入证书中的扩展项
    crl_extensions
    字段名
    生成CRL时加入的扩展项定义字段,
    如果没有提供CRL扩展项,那么生成的CRL就是V1版本的
    preserve
    no或yes
    通常情况下,证书签发的特种名称(DN)域的各个参数顺序是跟证书匹配策略的参数顺序一致的,
    但是,如果preserve参数值为yes,那么各个参数的顺序就保持跟证书请求的一致
    email_in_dn
    no或yes
    如果该值设置为no,那么证书请求中的E-mail信息会被从证书DN域删除,
    但是可以作为扩展项存在。
    如果没有设置改参数,那么默认是将E-mail信息放置在DN域中的
    msie_hack
    no或yes
    这是为了兼容老版本的微软IE而设置的参数,在基本废弃不用了
    policy
    字段名
    指定用于证书请求DN域匹配策略的字段,
    该字段的策略决定CA要求和处理证书请求提供的DN域各个参数值的规则
    nameopt
    证书DN域显示方式选项,其可选值跟X509指令-nameopt选项是相同的
    指定当前需要用户确认签发证书的时候显示的可读证书DN域显示方式,详细的请参考后面介绍x509指令的章节
    certopt
    证书域显示选项,其可选值跟x509指令-certopt选项是相同的,但是no_signame和no_sigdump总是被默认设置
    指定当需要用户确认签发证书的时候显示的证书域的方式,
    详细请参考后面介绍x509指令的章节
    copy_extensions
    none,copy或copyall
    该参数决定了证书请求中的扩展项信息是否加入到证书扩展项中,
    如果该项没有定义或者设置none,
    那么所有证书请求的扩展项中没有的项目就会被复制到证书中;
    如果值为copyall,那么证书请求扩展项中所有选项都会被复制到证书扩展项中,
    如果在证书扩展项中已经存在该项,那么证书扩展项的项目会首先被删除,然后再从证书请求中复制过来。
    UTCTime时间格式
    6.1.5 配置文件中X.509 V3证书扩展项
    a.扩展项字段应用概述
    X.509 v3证书已经得到了广发应用,其最大的特色就是增加了扩展项的支持。
    b.扩展项字段变量变量格式
    字符串扩展项
    nsComment = "This is a comment"
    多值扩展项
    basicContraints = critical,@bs_section
    [bs_section]
    CA=true
    pathlen=1
    原始扩展项
    c.扩展项字段变量种类
    X.509 v3证书的扩展项的主要目的是为了能够对证书和其相关私钥的用途和使用方法做出限制,从而提供证书的课管理型。
    a.描述字符串型的扩展项
    扩展项:nsBaseUrl, nsRevocationUrl, nsCaRevocationUrl, nsRenewalUrl, nsCaPolicyUrl, nsSslServerName和nsComment.
    例如:nsComment="DragonKing Generated Certificagte"
    b.证书类型(nsCertType)扩展项
    nsCetType是Netscape定义制定证书用途的扩展项。
    参数值
    说明
    client
    用于客户端的证书
    server
    用于服务器的证书
    email
    用户e-mail安全协议的证书
    objsign
    用于签发的证书
    sslCA
    用于签发SSL用户证书的CA证书
    emailCA
    用于签发E-mail用户证书的CA证书
    objCA
    用于签发用户签名证书的CA证书
    reserved
    保留值
    keyUsage定义值
    参数值
    说明
    digitalSignature
    用于数字签名的密钥
    nonRequdiation
    用于提供不可否认服务的密钥,一般是第三方公正机构使用的密钥
    keyEncipherment
    用于对其他密钥或相关安全信息进行加密,可以也能给予密钥安全传输
    dataEncipherment
    用于对用户数据进行加密的密钥
    keyAgreement
    用于商定或建立进一步操作需要的密钥的密钥
    keyCertSgin
    用于验证证书签名的密钥,也就是CA的公钥,这只有在CA证书中才有效
    cRLSign
    用于验证CA对CRL签名的密钥
    encipherOnly
    密钥仅用于加密
    decipherOnly
    密钥仅用于解密
    d.基本限制(basicConstraints)扩展项
    e.扩展密钥(extendedKeyUsage)扩展项
    f.主体密钥标识(subjectKeyIdentifier)扩展项
    主体密钥标识用于在证书拥有多个密钥集的时候指定密钥属于哪个密钥集。
    g.验证机构密钥标识(authorityKeyIdentifier)扩展项
    验证机构密钥标识用于构造证书链的时候标识签发机构的证书和密钥,证书中的验证机构密钥标识包括三个部分:密钥ID(keyID)、验证机构DN和CA证书序列号。
    如果给定keyid,那么CA签发证书的时候就会复制CA证书的主题密钥标识到新签发的证书中,一般来说,虽然给定了issure值,但是只有keyid出显但复制主体密钥失败或者keyid没有给定的情况下才会执行CA证书DN和序列号的复制操作。
    h.主体别名(subjectAltName)扩展项
    主体别名为证书提供了形式更加灵活的命名方式,理论上可以包含IP地址、URL、电子邮件及域名等信息作为主体别名。
    i.颁发者别名(issuerAltName)扩展项
    颁发者别名扩展项为颁发这的证书提供了不同形式的命名方式,他采用的形式跟上述的主题别名基本一致。
    j.验证机构信息处理(authorityInfoAccess)扩展项
    验证机构信息处理扩展给出了如何处理跟CA相关的信息的详细细节。
    accessOID;location
    k.CRL分布点(crlDistributionPoints)扩展项
    CRL分布店扩展项用于指明用户为了验证证书吊销状态而需要查找CRL信息的发布点。
    l.证书策略(certificatePolicies)扩展项
    证书策略扩展项定义了证书应用的策略,比如用于证书验证的策略。证书策略扩展项目前使用并不多,支持的软件业很少。
    6.2 文件编码格式
    openssl中虽然使用PEM作为基本的文件编码格式,但是,由于不同的对象其封装的标准格式不太一样,所以经常会导致读者产生迷惑。
    6.2.1 数据编码格式
    Openssl的编码是基于ASN.1标准的,ASN.1全称为Abstract Syntax Notation One,是一种描述数字对象的方法和标准。ASN.1是一种结构化的数字对象描述语言,她包括了两部分,分别为数据描述语言和数据编码规则。
    PEM编码全称是Privacy Enhanced Mail,是一种保密邮件的编码标准。
    a.信息转换为ASCII码或其他编码方式,比如采用DER编码
    b.使用对称加密算法加密经过编码的信息
    c.使用BASE64对加密后的信息进行编码
    d.使用一些头定义对信息进行封装,主要包含了进行正确解码需要的信息如:
    Proc-Type,4:ENCRYPTED
    DEK-Info:cipher-name,ivec
    e.在这些信息的前面加上形式头标注信息
    —BEGINPRIVACY�ENHANCED MESSAGE—
    在这些信息的后面加上如下形式尾标注信息:
    —ENDPRIVACY�ENHANCED MESSAGE—
    它在上述第一步采用的是DER编码,所以,从本质上来说,openssl的PEM编码就是在DER编码基础上进行BASE64编码,然后添加一些头尾信息组成。
    6.2.2 证书编码
    a.X.509
    b.PKCS#12证书
    c.PKCS#7证书
    6.3 文本数据库
    Openssl的文本数据库结构非常简单,每一行代表一条完整的记录,每条记录对应一个已经签发的证书。一般来说,每条记录包括六个可选的字段,分别是:证书状态、证书生效时间、证书到期时间、证书序列号、证书存放路径及证书的特征名称(DN)值。
    6.4 序列号文件
    序列号文件是ca指令签发证书的时候的依据文件之一,他从该文件读取当前签发的证书的序列号并将序列号文件中的序列号加1.
    6.5 随机数文件
    无论使用Openssl的指令还是其API,随机数文件都是会经常碰到的一个概念。
    6.6 口令输入方式
    口令输入方式
    表示
    提示输入
    -passin stdin
    直接输入
    -passin pass:12345678
    环境变量输入
    -pass env:passwdvar
    文件输入
    -passin file:filename
    描述符输入
    -passin fd:number
  • 相关阅读:
    Hibernate中的一对一注解配置
    Hibernate=====HQL实用技术
    Hibernate中的session的线程安全问题
    初学orcale(一)
    initBinder转换日期格式
    poi学习
    jqueryUI学习
    JavaScript中node的相关属性
    JavaScript函数的调用(通过节点)--JavaScript DOM编程艺术
    DOM中的四种方法--Javascript DOM编程艺术
  • 原文地址:https://www.cnblogs.com/aixiaoxiaoyu/p/8400036.html
Copyright © 2020-2023  润新知