生成自签名证书

数字证书

数字证书包含服务器名称、主机名称,签发机构的名称,签发机构的签名。如何生成自签名证书。证书的目的是简历特定密钥对与特定实体之间的联系。
自签名根证书是指一堆密钥对的私钥对本身相应的公钥生成的证书请求进行签名而颁发的证书,证书的申请人和签发人都是同一个。
须要一对密钥对;
经常使用的是RSA,DSA密钥,ECDSA密钥,用于密钥交换的证书不能用DSA,只能用RSA,由于DSA不能加解密也不能作密钥交换,只能作签名;ECDSA尚未被大部分的CA支持;
生成密钥可使用OpenSSL的genrsagendsa指令,也可使用req指令;
证书认证请求文件(csr文件)
这是按照必定格式生成的文件,里面包含实体信息
将实体信息和公钥一块儿用相应的私钥签名,是CA(证书认证)能确认这些信息是用户发送的(证书请求中的公钥拿出来验证这个证书请求的签名)
经过OpenSSL的req指令填写和生成这个csr文件
不一样的CA要求,可能须要更改默认的配置文件openssl.cnf
将证书请求文件(csr文件)给CA签发
验证证书请求上的签名是否正确,确保公钥对应的私钥就在申请者手中而且申请信息是正确没被更改的
CA对某些字段信息可能有特殊的要求,好比要求国家,身份等信息要求跟CA自己设定的同样
若是CA是在OpenSSL指令的基础上,那么它使用的签发指令多是ca,也多是x509node

如何生成一个简单的自签名证书

方法一:生成一个自签名的根证书

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命令

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.cnfreq字段的default_bits选项的参数,生成一个RSA密钥
若是没有使用-nodes选项,而且生成了新的私钥,私钥会被输出到-keyout指定的文件中时将被以DES3的CBC模式加密。算法

ca指令

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指令

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机构给本身签名,因此首先生成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

利用ca证书和私钥生成带有ca签名的证书

openssl x509 -req -CA ca.crt -CAKey ca.key -CAcreateserial -in server.csr -out server.rt
相关文章
相关标签/搜索