10.1 证书和CA功能概述
10.1.1 证书存在价值
数字证书正是为了建立实体跟密钥对之间的联系而存在,证书验证中心CA充当了确认特定实体跟密钥对之间关系的确认人,并且通过用自己的私钥对这些确认信息和公钥一起签名来保证其可信性和不可改变性。
10.1.2 证书生命周期
a.证书申请:所谓证书生命周期是指从证书申请到证书被吊销的整个过程,这中间涉及证书申请、颁发、使用管理方面的问题。
b.证书颁发
c.证书验证
d.证书吊销:一是从CA的证书数据库中删除被吊销的证书;而是对外公布被撤销的证书信息,如序列好等,具体来说就是生成和公布证书吊销列表CRL。
e.证书吊销
f.证书过期
10.1.3 证书的封装类型
a.X509证书
X509证书包含的内容主要是用户信息、证书序列号、签发者、有效期、公钥、其他信息及CA的数字签名。
b.PKCS#12证书
c.PKCS#7证书
10.1.4 三种不同封装格式证书
10.1.6 openssl证书和CA指令概览
10.2 申请证书
a.功能概述和指令格式
req指令一般来说应该是提供给证书申请用户的工具,用来生成证书请求以便交给CA验证和签发证书。
备注:你只要根据自己的需要选取其中部分即可。
b.输入和输出格式选项inform,outform和keyform
c.输入和输出文件选项in,out,key和keyout
d.输入和输出口令选项passin和passout
e.指令操作类型new\newkey\nodes和x509
备注:
所谓自签名根证书,就是只用一堆密钥对自己相应的公钥生成的证书请求进行签名而颁发证书,这样,证书申请人和签发人都是同一个,所以陈伟自签名根证书。
f.属性设置选项digest,subj,days和set_serial
digest选项指定了生成证书请求或者自签名根证书时使用的信息摘要算法,该信息摘要算法一般在生成数字签名的时候使用。
subj选项直接从指令行指定证书请求的主体名称,如果没有出示该选项,那么req指令将会根据配置文件特征名称字段的设定提示用户输入必要的信息。
g.配置文件选项config,extensions和requxts
config选项指定了req指令在生成证书请求的时候使用openssl配置文件,改文件的最好例子是openssl.cnf。
extensions选项指定了生成自签名根证书的时候使用的扩展字段,其参数为openssl配置文件中某个字段名。
reqexts选项指定了生成证书请求时使用的扩展字段,该字段参数也是配置文件中的某个字段名。
h.属性格式化选项asn1-kludge,newhdr和utf8
newhdr选项使用后将会在输出的PEM编码的证书请求开始和结束增加NEW标记字符串。
i.输出内容选项text,reqopt,pubkey,noout和subject
j.输出字符编码选项nameopt
nameopt选项指定了如何显示主体名称和签发这名称,主要用于显示名称中不同编码的内容,比如UTF8编码等。
k.输出字符编码选项nameopt
l.证书请求数字签名验证选项verify
m.其他选项rand,batch和verbose
rand选项指定了生成密钥对或者其他一些操作需要的随机数种子文件。如果没有使用rand选项,指令会从其他可能得到的资源取得随机数种子数据。
batch选项将不再提示用户输入生成证书请求需求的用户信息,而是直接从openssl配置文件特征名称字段读取默认值,如果没有默认值,则不填写该值域。
10.2.2 生成证书密钥
a.证书请求中使用RSA密钥
RSA密钥是目前证书中最经常使用的密钥类型,这一步是因为其既可以支持密钥交换,有可以支持数字签名的特性。
b.证书请求中使用DSA密钥
DSA密钥专门用于数字签名的密钥,当你要申请一个用于数字签名的证书的售后,就可能需要使用这种类型的密钥。
10.2.3 申请用户证书
10.2.4 申请CA证书
10.3 建立CA
10.3.1 CA服务器的基本功能
CA服务器是一个应用程序,他从技术上实现符合PKI和X509等相关证书的签发和管理功能。
基本功能:接收申请证书的请求、审核证书请求、签发证书、发布证书、吊销证书、生成和发布证书吊销列表(CRL)及证书库管理。
a.接受证书请求
b.审核证书请求
c.签发证书
d.发布证书
e.吊销证书
f.生成和发布CRL
g.证书库管理
10.3.2 CA服务器的基本要素
至少具备以下一些要素
a.具备接收证书请求、审核证书请求、签发证书、发布证书、吊销证书、生成和发布CRL和证书库管理。
b.一个CA证书和一个其相应的私钥,可能是自签名的根证书,也可能是向另一个CA申请的证书
c.证书数据库,用于存储证书(有时候还包括私钥)
10.4 CA操作
10.4.1 ca指令介绍
a..功能概述和指令格式
b.证书配置文件选项config,name,extensions,extfile和policy
c.特殊的证书请求输入选项ss_cert和spkac
ss_cert选项允许用户输入一个自签名的证书作为申请证书的证书请求,ca指令将会从这个字签名证书中提取用户信息和公钥用于签发最后的用户证书。
spkac选项允许用户输入一个SPKAC格式文件作为申请证书请求的资料,spkac。
d.证书有效期选项startdate,days和enddate
这三个都是设置证书有效日期的选项,分别是设置证书的生效时间、证书的到期时间及有效时间。
startdate设置证书的生效时间,其参数格式是"YYMMDDHHMMSSZ",每两位代表一个时间变量。
days选项设置证书的有效天数。所谓有效天数,也就是从证书生效的时间到证书到期的时间之间的天数。
enddate选项的参数格式跟startdate选项一样,用来设置证书的到期时间。
e.证书内容选项subj,preserveDN,noemailDN,md和msie_back
证书的主题名称(subject name,也称为特征名称),由证书请求中的主体名称决定。
preserveDN选项使指令在签发证书的时候让证书主体名称内的各项内容顺序跟证书请求中的顺序保持一致。
f.CA证书和私钥选项cert,keyfile,keyform,passin和key
在签发证书的时候,需要使用CA的证书和私钥对用户的证书请求进行签发证书操作。
g.证书吊销选项revoke,crl_reason,crl_hold,crl_compromise和crl_CA_compromise
revoke选项让你能够轻松地吊销一个证书,其参数就是你需要吊销的证书文件名,revoke选项吊销证书应该是PEM编码的X509证书。
h.CRL生成选项gencrl,crldays,crlhours和crlexts
执行完证书吊销操作后,证书库中相应的证书记录会更新,但是,对于离线的应用验证。
i,证书管理选项status和updatedb
status选项用来查看证书库中制定证书的状态,比如是否有效、吊销或者过期等。
updatedb选项用来更新文本数据库的证书状态,他主要用来更新证书库中已经过期的证书的状态信息。
j.notext,batch和verbose选项
10.4.5 建立一个多级CA
a.任务概述
技术工作包括:
*使用req指令生成一个自签名根证书作为RootCA的证书,配置RootCA的配置文件
*使用req指令生成一个CA证书请求,并使用RootCA的证书签发请求形成SubCA的证书,配置SubCA的配置文件。
*使用req指令生成一个证书请求,并使用SubCA的证书签发请求形成用户证书B
*使用req指令生成一个证书请求,并使用RootCA的证书签发该请求形成用户证书A.
b.建立RootCA
建立RootCA技术上抽象的任务有三个部分:建立一个CA目录结构、生成一个字签名跟证书和修改配置文件。
c.建立SubCA
*建立SubCA证书目录
*生成SubCA密钥对和证书请求
*使用RootCA签发SubCA的证书
*设置SubCA的证书和私钥文件
*设置SubCA的配置文件
d.签发用户证书A
用户证书A是RootCA签发的普通用户证书,生成一个用户证三部分:生成密钥对、生成证书请求及签发证书
e.签发用户证书B
用户证书B的申请和签发跟用户证书A的申请和签发基本相同。
10.5 使用证书
10.5.1 X.509证书
a.X509指令功能概述和格式
事实上,还有很多子选项在这里没有一一列出,由此可见该指令的功能之强。
b.输入和输出格式选项inform,outform,keyform,CAform和CAkeyform
c.输入和输出选项in,out,CA和CAkey
d.输入口令选项passin
passin参数给出了当使用signkey输入私钥文件时需要提供的口令字符串。
e.输出显示内容
f.输出证书更加灵活的内容的选项text和certopt
g.证书信任设置选项trustout,addtrust,clrtrust,addreject,clrreject,setalias和alias
h.证书显示名称格式选项nameopt
i.验证证书是否过期选项checkend
j.信息摘要算法选择选项md5、md2、sha1和mdc2
10.5.2 CRL
a.crl指令功能概述和格式
b.输入和输出格式选项Inform和outform
c.输入和输出选项in和out
d.输出显示内容选项hash,issuer,noout,text,lastupdate,nextupdate和date
hash选项显示CRL文件中CA签名的HASH值
issuer选项显示CRL文件签发这信息
noout选项要求指令不输出编码CRL的内容
text选项要求指令输出CRL文件的课理解的形式
lastupdate是CRL文件最近更新时间
nextupdate是CRL下次更新时间
e.输出字符编码选项nameopt
nameopt选项指定了如何显示主体名称和签发者名称,主要用于显示名称中不同编码内容。
f.CA文件和目录选项CAfile和CApath
CAfile指定一个CA证书文件,该CA证书用于核实CRL中签名是否正确和有效。
CApath则告诉指令从一个目录中查找有效的CA证书,此目录必须是标准证书目录,所谓标准目录。
10.5.3 OKCS#12证书
a.pkcs12指令功能概述和格式
b.输入和输出文件选项in和out
c.输入和输出口令选项passin,passout,password
d.输出内容选项noout,clcerts,cacerts,nocerts,nokeys和info
noout: 指令不要输出任何私钥和证书信息到输出文件中
clcerts: 只输出客户证书(不是CA证书)到输出文件中
cacerts: 输出CA证书到输出文件中
nokeys: 指令不要输出私钥到输出文件中
info: 指令输出一些其他PKCS#12证书文件相关的信息。
e.加密算法选项des,des3,idea,aes128,aes192,aes256和nodes
f.nomacver和twopass
nomacver选项告诉指令在读取PKCS#12证书之前,不需要对文件进行MAC的完整性验证
twopass选项告诉指令提示输入完整性和加密需要的密码源。
g.创建PKCS#12证书选项export
j.证书内容输入选项inkey和certfile
i.证书别名选项name和caname
j.证书加密算法选项descert,keypbe和certphe
k.密钥用途选项keyex和keysig
keyex选项指定密钥和证书密钥交换
keysig则指定密钥和证书用于数字签名。
l.其他选项chain和rand
chain选项告诉指令建立一个完整用户证书的证书链保存在PKCS#12文件中
随机数文件选项rand提供了产生随机数的参考种子文件。
10.5.4 PKCS#7证书
a.crl2pkcs7指令功能概述和指令格式
b.输入和输出格式选项inform和outform
c.输入和输出选项in,out和certfile
d.不包含CRL的PKCS#7证书选项nocrl
pkcs7指令功能概述和指令格式
a.输入和输出格式选项inform和outform
b.输入和输出选项in和out
c.输出显示内容选项ptint_certs,text和noout
10.6 验证证书
10.6.1验证证书的过程:
*确认证书内容是正确和完整的,没有被串改,CA签名正确的
*确认证书有效的,在有效内并且没有被吊销
*确认CA证书是可以被信任的证书,如果CA证书不是根证书
*通过与用户交互,基于证书中的公钥和公钥密钥算法确认用户的身份。
10.6.2 verify指令介绍
a.CA证书选项CApath和CAfile
CApath选项用来指定我们的信任的CA的证书存放目录
CAfile选项用来指定我们信任CA证书文件,其中可以包含多个CA证书。
b.证书用途选项purpose
c.验证选项issuer_checks,crl_check,crl_check_all和ignore_critical
issuer_checks选项告诉指令输出在查找签发这证书过程中的详细信息,从而可以知道每个候选签发者证书被拒绝的原因
crl_check选项告诉指令检查被验证证书的CRL,如果不幸CRL中存在被验证证书的序列号,则证书将不能通过验证。
crl_check_all选项告诉指令检查证书链中所有证书的CRL,即不仅仅要对被验证证书是否被吊销进行验证,还要对整个证书链中其他证书是否被吊销进行验证。
ignore_critical选项告诉指令可以忽略一些比较小的扩展项。
6.verbose:指令将把验证过程中的所有详细过程输出
7.verify指令验证错误诊断代码
10.6.3 在线证书状态服务协议指令ocsp
a.功能概述和指令格式
b.输入和输出选项out,reqout,respout,reqin和respin
c.输出内容选项req_text,resp_text和text
d.证书相关选项issuer,cert和serial
e.请求相关signer,signkey,nonce和no_nonce
备注:nonce使用摘要算法生成跟时间相关的随机数,为了防止重放攻击等行为的发生。
f.OCSP响应器地址选项host,path和url
g.响应验证证书选项CAfile,CApath,verify_certs,trust_other和VAfile
h.响应策略noverify,no_signature_verify,no_cert_verify,no_cert_checks,no_intern,no_chain,validity_period和status_age
i.OCSP服务器选项index和CA
index选项是否在指令中已经运行在OCSP服务器的模式下。
OCSP响应其就是为了处理OCSP请求的。
h.OCSP服务器运行方式选项port和nrequest