数字证书
数字证书包含服务器名称、主机名称,签发机构的名称,签发机构的签名。如何生成自签名证书。证书的目的是简历特定密钥对与特定实体之间的联系。
自签名根证书是指一堆密钥对的私钥对自己相应的公钥生成的证书请求进行签名而颁发的证书,证书的申请人和签发人都是同一个。
需要一对密钥对;
常用的是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
如何生成一个简单的自签名证书
方法一:生成一个自签名的根证书
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.cnf
中req
字段的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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。