博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
06.Openssl基本概念
阅读量:2243 次
发布时间:2019-05-09

本文共 6197 字,大约阅读时间需要 20 分钟。

6.1 配置文件
openssl的许多应用程序和函数使用配置文件获取默认的信息和选项,所以,要使用Opnessl,尤其使用openssl的指令。
6.1.1 配置文件概述
openssl提供的主要配置文件是openssl.cnf,他集成了openssl所要的配置文件选项的大部分内容。
使用形式:变量名=变量值
注意事项:
a.变量值域可支持由"\"或者需要用其他引用符号声明的特殊字符,如果“\"符号需要这样声明:"\"。此外,变量值域还支持在行末尾使用"\"作为连接符号来使得可以使用多行数据作为一个值域。
例如:“\r” “\n”
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

转载地址:http://oqwdb.baihongyu.com/

你可能感兴趣的文章
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
leetcode 130. Surrounded Regions
查看>>