8.openssl req

数字证书申请和生成工具。也可以为根CA自行签署证书。

该命令中很多值、属性、格式或默认值都在config文件openssl.cnf中指定。

[root@xuexi ~]# man req

NAME

req - PKCS# certificate request and certificate generating utility.

SYNOPSIS

openssl req [-inform PEM|DER] [-outform PEM|DER] 

[-in filename]

 [-passin arg] 

[-out filename]

 [-passout arg] 

[-text] [-pubkey] [-noout] [-verify]

 [-modulus] 

[-new]

[-rand file(s)] 

[-newkey rsa:bits]

 [-newkey alg:file] 

[-nodes][-key filename]

 [-keyform PEM|DER]

[-keyout filename]

 [-keygen_engine id] 

[-[digest]] [-config filename]

 [-subj arg] [-multivalue-rdn]

[-x509] [-days n] [-set_serial n]

 [-asn1-kludge] [-no-asn1-kludge] [-newhdr] 

[-extensions section][-reqexts section]

 [-utf8] [-nameopt] [-reqopt] 

[-subject] [-subj arg] [-batch]

 [-verbose] [-engine id]

DESCRIPTION

The req command primarily creates and processes certificate requests  format. It can additionally create self signed certificates for use as root CAs for example.

-in filename:指定证书请求的输入文件filename,即该文件是用于签名的证书请求文件。当指定创建证书请求选项-new或-newkey时该选项失效,因为创建证书请求不需要请求文件

-out filename:证书请求或自签名证书的输出文件,不指定时默认stdout

-text:以文本行书打印证书请求

-noout:不输出关于部分信息,关于noout的用法,请参看http://www.cnblogs.com/f-ck-need-u/p/6090833.html中关于-noout的示例,他们的用法是一样的

-verify:验证请求中的签名

【证书请求有关项:】

-subject:打印请求信息主题(如果指定了x509则打印证书信息主题)

-subj args:替换或自己指定证书请求时需要输入的信息,并输出修改后的请求信息。args的格式为“/type0=value0/type1=value1/type2=...”,如果有空格也将被计入值,如果不想填写这些信息,value部分使用点“.”即可保留空白,但是如果直接敲回车键将是使用配置文件中的默认值。其中其中可识别名称(man req中指定的)有:C是Country、ST是state、L是localcity、O是Organization、OU是Organization Unit、CN是common name、emailAddress是email

-new:创建一个证书请求,会交互式让你输入一些信息,这些交互选项以及交互选项信息的长度值以及其他一些扩展属性在配置文件(其中主配置文件为openssl.cnf,还有些辅助配置文件)中指定了默认值。

如果没有指定-key选项,则会自动生成一个RSA私钥,该私钥的生成配置也在openssl.cnf中指定了。

证书请求及自签署证书有关项:

-newkey args:创建一个新的证书请求,并创建私钥,类似于-new选项。args的格式是rsa:numbit(其他加密算法请查看man),其中numbit是rsa密钥的长度,如果numbit省略了(即-newkey rsa),则长度更具openssl.cnf中default_bits指定的值作为默认长度,默认该值为2048

-key filename:指定私钥的输入文件,证书请求签名时需要

-keyout filename:指定新创建的私钥存放位置,若没有指定该选项,则使用openssl.cnf中的default_keyfile指定的值,默认该值为privkey.pem

-nodes:默认新创建私钥会被加密,指定该选项后创建的私钥将不被加密

-pubkey:输出公钥

-[dgst]:指定对请求进行签名时的单向加密算法,如-md5/-sha1/-sha512等,如果不指定这使用openssl.cnf中default_md指定的值,默认该值为sha1

-x509:指定该选项将输出一个自签名数字证书,而不是创建证书请求。一般用于测试或者根CA创建自签名证书。

-days n:指定自签名证书的有效期限,默认30天,需要和-x509一起使用。注意是自签名证书期限,而非请求的证书期限,openssl.cnf中的default_days指定了请求证书的有效期限,默认365天。

-set_serial n:指定生成自签名证书时的证书序列号,该序列号将写入openssl.cnf中serial指定的文件中,这样就不需要手动向该序列号文件写入值了。支持数值和16进制值(0x开头),虽然也支持负数,但不建议。

配置文件项和杂项:

-config filename:指定req的配置文件,指定后将忽略所有的其他配置文件。如果不指定则默认使用openssl.cnf中的req段落的值

-batch:非交互模式,直接从openssl.cnf中读取证书请求所需字段信息。但若不指定-key仍会询问key

-verbose:显示操作执行的详细信息

openssl.cnf中关于req段落的配置格式

input_password和output_password:密码的输入和输出文件,与命令行的-passin和-passout选项对应,默认未指定。

default_bits:证书申请时生成的RSA密钥长度,不写时默认是512,命令行的-new选项会用到它,-newkey可能会用到也可能会忽略该选项。

default_keyfile:默认的私钥输出文件,与命令行的-keyout选项对应。

encrypt_key:当设置为no时,创建新私钥时不会加密该私钥。设置为no时与命令行的-nodes等价。还有等价的兼容性写法:encry_rsa_key。

default_md:指定对证书请求进行签名时的单向加密算法,默认为md5,与命令行的-[dgst]对应。

prompt:当指定为no时,则不提示输入证书请求的字段信息,而是直接从openssl.cnf中读取。请小心设置该选项,经个人测试,尽管设置了DN的所有默认值以及其他一些默认值,创建证书请求时还是出错。所以建议将此设置注释掉或者设置为yes。

distinguished_name:(DN)是一个扩展属性段落,用于指定证书请求时可被识别的字段名称。

以下是openssl.cnf中默认的配置文件格式及值:更多关于配置项请看:http://www.cnblogs.com/f-ck-need-u/p/6091027.html

[ req ]

default_bits = 

default_md = sha1

default_keyfile = privkey.pem

distinguished_name = req_distinguished_name

attributes = req_attributes

x509_extensions = v3_ca # The extentions to add to the self signed cert

string_mask = utf8only

[ req_distinguished_name ]

countryName = Country Name ( letter code)

countryName_default = XX

countryName_min = 

countryName_max = 

stateOrProvinceName = State or Province Name (full name)

localityName = Locality Name (eg, city)

localityName_default = Default City

.organizationName = Organization Name (eg, company)

.organizationName_default = Default Company Ltd

organizationalUnitName = Organizational Unit Name (eg, section)

commonName = Common Name (eg, your name or your server\'s hostname)

commonName_max = 

emailAddress = Email Address

emailAddress_max = 
上一篇:【windows核心编程】DLL相关(3)


下一篇:which 查看可执行文件的位置