数字证书包含服务器名称、主机名称,签发机构的名称,签发机构的签名。如何生成自签名证书。证书的目的是简历特定密钥对与特定实体之间的联系。
自签名根证书是指一堆密钥对的私钥对本身相应的公钥生成的证书请求进行签名而颁发的证书,证书的申请人和签发人都是同一个。
须要一对密钥对;
经常使用的是RSA,DSA密钥,ECDSA密钥,用于密钥交换的证书不能用DSA,只能用RSA,由于DSA不能加解密也不能作密钥交换,只能作签名;ECDSA尚未被大部分的CA支持;
生成密钥可使用OpenSSL的genrsa
和 gendsa
指令,也可使用req指令;
证书认证请求文件(csr文件)
这是按照必定格式生成的文件,里面包含实体信息
将实体信息和公钥一块儿用相应的私钥签名,是CA(证书认证)能确认这些信息是用户发送的(证书请求中的公钥拿出来验证这个证书请求的签名)
经过OpenSSL的req
指令填写和生成这个csr文件
不一样的CA要求,可能须要更改默认的配置文件openssl.cnf
将证书请求文件(csr文件)给CA签发
验证证书请求上的签名是否正确,确保公钥对应的私钥就在申请者手中而且申请信息是正确没被更改的
CA对某些字段信息可能有特殊的要求,好比要求国家,身份等信息要求跟CA自己设定的同样
若是CA是在OpenSSL指令的基础上,那么它使用的签发指令多是ca
,也多是x509
node
openssl req -new -x509 -newkey rsa:1024 -out server.crt
openssl genrsa -out server.key 1024 openssl req -new -x509 -key server.key -out server.crt
openssl genrsa -out server.key 1024 openssl req -new -key server.key -out server.csr openssl x509 -req -in server.csr -out server.crt
req
指令既能够直接生成一个新的自签名证书,也能够根据现有的证书请求和其相应私钥生成自签名根证书。若是是根据现有证书请求生成自签名根证书,那么必定要-key
选项指定相应的私钥指令才能执行成功。req
指令也能够生成密钥对,但在使用req
同时生成密钥对是对密钥对保存和格式有限制(只能是PEM编码,DES3-CBC模式加密)。若是须要更灵活的处理,可使用genrsa
或者gendsa
先生成密钥而后使用-key
选项指定。
参数选项-new
指定执行生成新的证书请求,此时会忽略-in
指定的内容-x509
根据现有的证书请求生成自签名根证书(要求使用-key
指定证书请求里面的公钥相应的私钥,以便对自签名根证书进行签名)-key
指定输入的密钥,若是不指定此选项会根据-newkey
选项的参数生成密钥对-newkey
指定生成一个新的密钥对,只有在没有-key
选项的时候才生效,参数形式为rsa:numbits
或者 dsa:file
-subj
直接从指令行指定证书请求的主体名称,格式为/
分割的键值对字符串,若是没有此选项,那么会弹出交互提示;-days
设定了生成的自签名根证书的有效期,单位为天;该选项只有在使用了-x509
选项生成自签名证书的时候才生效,默认为30天。-config
指定req
指令在生成证书请求的时候使用的OpenSSL配置文件,通常默认为openssl.cnf
-extensions
选项指定了生成自签名根证书的时候使用的扩展字段,其参数为OpenSSL配置文件中的某个字段名-reqexts
选项指定了生成证书请求是使用的扩展字段,该字段参数也是配置文件中的某个字段名-text
让指令输出证书请求或者自签名根证书内容的明文解析,默认状况下,它将输出全部可能输出的内容,若是使用了reqopt
选项,则输出内容取决于reqopt
选项-reqopt
指定text
选项输出的内容,能够为多个,每一个之间使用,
分隔set_serial
指定生成的自签名根证书的序列号,默认状况下生成的自签名根证书序列号是0;该选项也只有在生成自签名根证书的时候有效。-keyout
置顶新生成的私钥的输出(仅在使用了-newKey
或 -new
选项致使生成新密钥对的时候才有效,若是使用了-key
则此选项被忽略)-keyform
指定输入密钥的编码格式(好比PEM,DER,PKCS#12,Netscape,IIS SGC,Engine等)-in
指定输入证书请求文件,若是使用了-new
或者 -newkey
选项,此选项被忽略-inform
指定输入证书请求文件的编码格式(好比PEM,DER)-out
指定输出证书请求文件或自签名证书文件-noout
使用此选项后,指令将不会输出编码的证书请求或者自签名根证书到-out
选项指定的文件中,通常用来测试指令或者查看证书请求的信息-outform
指定输出证书请求文件或自签名证书的编码格式(好比PEM,DER)-pubkey
使用此选项活 指令将输出PEM编码的公钥到-out
选择指定的文件中,默认状况下只输出私钥到-keyout
指定的文件,并不输出公钥。-passin
指定读取-key
选项指定的私钥所须要的解密口令,若是没有指定,私钥又有密钥的话,会弹出交互提示-passout
指定-keyout
选项输出私钥时使用的加密口令-nodes
表示不对私钥进行加密,若是指定此选项,则忽略-passout
指定的口令;若是没有此选项,却指定了-passout
则会有交互提示。-digest
指定生成证书请求或者自签名根证书是使用的信息摘要算法,通常在生成数字签名的时候使用。-verify
使用此选项对证书请求中的数字签名进行验证操做,并给出失败或者成功的提示信息,其验证的过程是从证书请求里面提取公钥,而后使用该公钥对证书请求的数字签名进行验证。
若是没有-key
选项也没有-newkey
选项,则会根据openssl.cnf
中req
字段的default_bits
选项的参数,生成一个RSA密钥
若是没有使用-nodes
选项,而且生成了新的私钥,私钥会被输出到-keyout
指定的文件中时将被以DES3的CBC模式加密。算法
ca
指令模拟一个完整的CA服务器,它包括签发用户证书,吊销证书,产生CRL及更新证书库等管理操做-config
指定要使用的配置文件,若是没有此选项,则会先查找OPENSSL_CONF
或者SSLEAY_CONF
定义的文件名,若是这两个环境变量都没有定义,就使用OpenSSL安装的默认路径,通常是/usr/local/openssl/openssl.cnf
,具体看安装配置-startdate
设置证书的生效时间 格式为YYMMDDHHMMSSZ
指定年月日时分秒
,若是没有则使用主配置文件中的default_startdate
-enddate
格式跟-startdate
同样-days
设置证书的有效天数,生效时间到到期时间之间的天数,若是使用了-enddate
,此选项被忽略-name
指定配置文件中CA选项的名称-notext
不输出明文信息到证书文件-subj
直接从指令行指定证书请求的主体名称,格式为/
分割的键值对字符串,若是没有此选项,那么会弹出交互提示;-cert
参数是一个能够包含路径的文件名,该文件是一个PEM编码的X.509证书文件-keyfile
参数是一个包含路径的文件名,文件格式能够为PEM,DER,PKCS#12,Netscape,IIS SGC,Engine,但须要经过-keyform
指定究竟是哪一种格式-policy
指定CA的匹配策略-extensions
指定x509 v3
扩展字段的字段名,若是没有这个选项就由-extfile
中内容-extfile
指定x509 v3
扩展的配置文件,若是没有-extensions
字段,则由CA主配置文件中的x509_extensions
选项指定-in
指定一个能够包含路径的证书请求文件名,应该是PEM变得PKCS#10格式的证书请求-infiles
指定一系列包含PEM编码证书请求的文件,包含多个,只能做为指令的最后一个选项,其后的参数都被认为是证书请求文件-out
选项指定了输出签发好的证书或者新生成的CRL的文件,若是没有使用-notext
选项,那么证书的明文信息也会输出到-out
选项指定的文件中-outdir
选项指定了新生成的证书的输出目录,默认输出到newecerts
目录,并使用.pem
做为后缀,都是PEM编码。服务器
x509
指令能已各类方式显示一个证书的内容,也能够对一个证书的格式进行转换,还能够签发证书-in
-inform
-out
-outform
-keyform
-CA
指定签发证书或者转换证书格式的时候须要的CA证书文件-CAkey
指定签发证书或者转换证书格式时须要的CA证书对应的私钥文件路径-CAform
指定CA证书文件的格式-CAkeyform
私钥文件格式-startdate
-enddate
-pubkey
-noout
crl指令crl
指令用于显示、处理和验证CRL文件信息-in
-inform
-out
-outform
-noout
测试
openssl genrsa -out server.key 1024
须要本身扮演ca机构给本身签名,因此首先生成ca证书编码
openssl genrsa -out ca.key 1024 ---- 生成ca私钥 openssl req -new -key ca.key -out ca.csr ---- 根据私钥生成请求文件 openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt ---- 根据请求文件生成证书
openssl req -new -key server.key -out server.csr
openssl x509 -req -CA ca.crt -CAKey ca.key -CAcreateserial -in server.csr -out server.rt