- -help
-
打印使用信息。
- -verbose
-
打印正在被执行的操作的细节。
- -config filename
-
允许指定一个替代的配置文件。额外的,了解默认值的描述,参阅 openssl(1) 的 “COMMAND SUMMARY”
- -name section
-
指定要使用的配置文件段(覆盖
ca
段的default_ca
)。 - -in filename
-
一个输入文件的文件名,其中包含了单个要被 CA 签名的证书请求。
- -ss_cert filename
-
单个将被 CA 自签名的证书。
- -spkac filename
-
将被 CA 签名的一个文件,文件中包含单个 Netscape 签名的公钥、挑战码和额外的字段值。参见 SPKAC FORMAT 段了解输入请求和输出格式的信息。
- -infiles
-
若设置则应出现在选项尾部,所有后续的每个参数均会作为包含了证书请求的文件的名称。
- -out filename
-
输出的证书要输出的文件。默认值为标准输出。证书的细节会一同以 PEM 格式(除非指定了
-spkac
,此时会输出 DER 格式)打印至该文件。 - -outdir directory
-
输出的证书要输出的文件夹。证书将写入一个文件,该文件的文件名由十六进制的序列号以及后缀
.pem
组成。 - -cert
-
CA 证书文件。
- -keyfile filename
-
用于签名请求的私钥。
- -keyform PEM|DER
-
私钥文件中数据的格式。默认为 PEM。
- -sigopt nm:v
-
在签名以及验证操作中,传递给签名算法的选项。这些选项的名称和值均是算法特定的。
- -key password
-
用于加密私钥的密码。鉴于一些系统的命令行参数是可见的(比如在 Unix 系统上的
ps
工具),该选项应该小心使用。 - -selfsign
-
指出签发的证书的密钥(用
-keyfile
指定的)应与证书请求所使用的密钥相同。使用不同密钥签名的证书请求将被忽略。若指定了-spkac
、-ss_cert
或-gencrl
,那么忽略-selfsign
。
使用-selfsign
的一个后果就是,自签名的证书会出现在证书数据库(参见配置选项database
)的条目中,并且该自签名证书将与用该证书签名的其它证书共用一个序列号计数器。 - -passin arg
-
密钥加密密码的来源。关于
arg
的格式的更多信息参阅 openssl(1) 的 PASS PHRASE ARGUMENTS 节。 - -notext
-
不要将文本格式的证书输出值输出文件。
- -startdate date
-
允许明确地设置起始日期。日期的格式为 YYMMDDHHMMSSZ(同 ASN1 UTCTime 结构),或者为 YYYYMMDDHHMMSSZ(同 ASN1 GeneralizedTime 结构)。两种格式下,秒数 SS 和时区 Z 必须存在。
- -enddate date
-
允许明确地设置过期日期。日期的格式为 YYMMDDHHMMSSZ(同 ASN1 UTCTime 结构),或者为 YYYYMMDDHHMMSSZ(同 ASN1 GeneralizedTime 结构)。两种格式下,秒数 SS 和时区 Z 必须存在。
- -days arg
-
验证证书的天数。
- -md alg
-
要使用的信息摘要。任何被 OpenSSL
dgst
命令支持的摘要算法均可被使用。对于不支持摘要的签名算法(比如 Ed15519 和 Ed448),会忽略任何信息摘要算法。该选项同样适用于 CRL。 - -policy arg
-
该选项定义了要使用的 CA “策略”。其为配置文件中的一个段,该段决定了那些字段应该为必须字典,或者该如何匹配 CA 证书。参见 [_策略格式] 了解更多信息。
- -msie_hack
-
这是一个弃用的选项,让
ca
能于非常古旧的 IE 证书注册控制 “certenr3”。它在几乎所有地方都是用 UniversalStrings。由于老旧的控制有很多安全 BUG,强烈不建议使用它。 - -preserveDN
-
通常情况下,证书的 DN 顺序与相关的策略段中的字段的顺序相同。当设置了该选项后,它的顺序就与请求文件中的相同。主要是为了兼容老的 IE 注册控制,因为它仅接受证书中的 DN 与请求文件中的顺序相同的证书。在 Xenroll 中不需要。
- -noemailDN
-
若请求 DN 中包含 EMAIL 字段,那么证书的 DN 可以包含该字段,但是,仅将电子邮件放置在证书的 altName 扩展中是更好的策略。当设置了该选项后,EMAIL 字段会从证书主体中移除,并仅会被设置在最终会出现的扩展中。可以在配置文件中使用
email_in_dn
关键字来启用该行为。 - -batch
-
设置为批量操作模式。在该模式下不会提出任何问题,全部的证书都会被自动认证。
- -extensions sections
-
当签发证书时,配置文件中包含了证书扩展的段会被追加(默认为 x509_extensions,除非使用了
-extfile
选项)。若不存在扩展段,那么创建 V1 证书。若存在扩展段(即便它是空的),也会创建 V3 证书。参见 x509v3_config(5) 手册了解扩展节的格式详情。 - -extfile file
-
一个额外的配置文件,用来读取证书扩展(除非同时指定
-extensions
选项,否则使用默认段)。 - -engine id
-
指定一个(以唯一的
id
字符串确定的)引擎,让x509
尝试获得指定引擎的可用参考,若需要也会初始化它。该引擎会设置为所有可用算法的默认引擎。 - -subj arg
-
取代请求给出的主体名。arg 必须格式为 /type0=value0/type1=value1/type2=…。关键字可以用反斜线
\
转义,白空格会被保留。允许空值,但对应的类型不会包含在结果证书中。 - -utf8
-
字段的值将作为 UTF8 字符串解码,默用 ASCII 方式解码。这表示字段值,无论来自终端或者来自配置文件,必须是有效的 UTF8 字符串。
- -create_serial
-
如果从配置文件中指定的文本文件中读取序列号失败了,指定该选项会创建一个新的随机序列号,作为下次使用的序列号。要获得一个随机序列号,应该使用
-rand_serial
;该选项仅应该被用于简单的错误恢复。 - -rand_serial
-
生成一个大随机数作为序列号。它覆盖任何使用序列号文件的选项或配置。
- -multivalue-rdn
-
该选项导致
-subj
参数以支持完整多值 RDN 的方式被解析。举例:/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe
若不使用
-multi-rdn
,那么 UID 的值为123456+CN=John Doe
。 - -rand file…
-
指定单个或多个文件,包含随机数据,作为随机数生成器的种子。指定多个文件时,文件名之间用操作系统特定的分隔符加以区分。Windows 上用分号
;
,OpenVMS 上用逗号,
,其它系统用:
。 - [-writerand file]
-
将随机信息输出至指定的文件中。可在
-rand
参数后使用。
- -gencrl
-
该选项通过索引文件中的信息生成一个 CRL。
- -crldays num
-
距离下次 CRL 到期的天数。也就是基于当前时间和到期天数算的的
CRL nextUpdate
字段。 - -crlhours num
-
距离下次 CRL 到期的小时数。
- -revoke filename
-
要吊销的证书所在的文件。
- -valid filename
-
要追加 Valid 证书条目的证书所在的文件名。
- -status serial
-
显示以序列号指定的证书的吊销状态,并退出。
- -updatedb
-
更新数据库索引,移除过期证书。
- -crl_reasopm reason
-
吊销原因,reason 为这些值之一:
unspecified
、keyCompromise
、CACompromise
、affiliationChanged
、superseded
、cessationOfOperation
、certificateHold
、removeFromCRL
。对 reason 的匹配是大小写敏感的。设置任何吊销原因会生成 CRL V2。
实际上,removeFromCRL
并不是非常有用,因为它仅用于差量 CRL(delta CRL),而当前并没有实现。 - -crl_hold instruction
-
将 CRL 吊销原因码设置为
certificateHold
,将保留指令(hold instruction)设置为 instruction,该值必须为一个 OID。虽然可以使用任何 OID,但通常情况下,仅会使用holdInstructionNone
、holdInstructionCallIssuer
、holdInstructionReject
。 - -crl_compromise time
-
将吊销原因设置为
keyCompromise
,将妥协时间设置为 time。time 应为 GeneralizedTime 格式,也就是 YYYYMMDDHHMMSSZ。 - -crl_CA_compromise time
-
同 crl_compromise,但将吊销原因设置为
CACompromise
。 - -crlexts section
-
配置文件的该段中具有要包含的 CRL 扩展。若未出现 CRL 扩展段,那么创建 V1 CRL,若出现了 CRL 扩展段(即便为空),也会创建 V2 CRL。由 CRL 扩展定义的是 CRL 扩展(CRL extension),而非 CRL 条目扩展(CRL entry extension)。应该注意的是,一些软件(比如 Netscape)不能处理 V2 CRL。参见 x509v3_config(5) 了解更多扩展段格式的细节。
用于 ca 的选项的配置文件的段,依照下面的方法查找:若使用了 -name
命令行选项,则指明了要使用的段名。其他情况下,被使用的段的名称必须在配置文件的 ca
段(或配置文件的默认段)中的 default_ca
选项中指定。除了 default_ca
,下述选项将从 ca
段直接读取:RANDFILE
、preserve
、msie_hack
。其中 RANDFILE
是一个例外,这可能是一个 BUG,可能会在未来的版本中有所变化。
很多配置文件选项与命令行选项相同。当选项同时在配置文件和命令行中出现,则使用命令行的值。当一个选项被描述为强制项,那么它必须出现在配置文件中,否则会使用命令行的等价物(若出现的话)。
- oid_file
-
指定一个文件,包含额外的对象标识符(OBJECT IDENTIFIERS)。文件中的每行应该包含数字形式的对象标识符,一个白空格,接着是短名,一个白空格,最后是长名。
- oid_section
-
在配置文件中指定一个额外的节,该节用于包含额外的对象标识符。每行应该包含对象标识符的短名,后随一个等号
=
,以及它的数字形式。使用该选项时,长名和短名是等价的。 - new_certs_dir
-
同
-outdir
命令行选项。它指定了新证书将被放置的目录。强制项。 - certificate
-
同
-cert
。它给出了包含 CA 证书的文件。强制项。 - private_key
-
同
-keyfile
选项。文件包含 CA 证书的私钥。强制项。 - RANDFILE
-
在启动时,指定的文件会载入随机数生成器,在退出时,将向其中写入 256 字节的数据。它用于私钥的生成。
- default_days
-
同
-days
选项。证书认证的天数。 - default_startdate
-
同
-startdate
选项。证书认证的起始日期。若不设置则使用当前时间。 - default_enddate
-
同
-enddate
选项。该选项与default_days
(或等价的命令行)两者之一必须出现。 - default_crl_hours defult_crl_days
-
同
-crlhours
和-crldays
选项。仅用于两个选项均未出现时。要生成一个 CRL,则两者之一必须出现。 - default_md
-
同
-md
选项。强制项,除了签名算法不要求摘要(比如 Ed5519 和 Ed448) - database
-
要使用的文本数据库。强制项。该文件必须存在,即便初始情况下它可能为空。
- unique_subject
-
若值设置为
yes
,数据库中有效的证书条目必须具有唯一的主体。若设置为no
,那么多个有效证书可能会具有完全相同的主体。默认值为yes
,用来与旧版(0.9.8 之前)的 OpenSSL 兼容。但是,要让 CA 证书的延展(roll-over)更加简单,建议将该值设置为no
,特别是与-selfsign
命令行连用时。
注意,在有些情况下,创建不含任何主体的证书是有效的。在这种情况下,不具有主体的多个证书不被认为是重复的。 - serial
-
一个文本文件,其中包含了下一个被使用的十六进制表示的序列号。强制项。该文件必须存在,且包含一个有效的序列号。
- crlnumber
-
十六进制表示的要使用的下一个 CRL 数。仅当该文件存在时,crl 才会被插入 CRL 中。若该文件存在,它必须包含一个有效的 CRL 数。
- x509_extensions
-
同
-extensions
。 - crl_extensions
-
同
-crlexts
。 - preserve
-
同
-preserveDN
- email_in_dn
-
同
-noemialDN
。若你想从证书的 DN 中移除 EMAIL 字段,那么将该值设置为no
。若不出现,则默认值为允许 EMAIL 字段出现在证书的 DN 中。 - msie_hack
-
同
-msie_hack
。 - policy
-
同
-policy
。强制项。参见 策略格式 节了解详情。 - name_opt, cert_opt
-
这些选项指定提示用户确认签名时所使用的显示证书详情的格式。所有被 x509 工具的 -nameopt 和 -certopt 开关支持的选项均可以在此处被使用,但
no_signame
和no_sigdump
为永久选项,且不能被禁用(这是因为证书签名无法显示,因为在这个时间点上证书还没有被签名)。
为了方便,接受ca_default
这个值,用来生成一个合理的输出。
若两个选项均不出现,则使用先前版本的 OpenSSL 中的格式。强烈不鼓励使用旧格式,因为它仅会显示 policy 段提及的字段,错误地处理多字节字符串类型,且不会显示扩展。 - copy_extensions
-
决定如何处理证书请求中的扩展。若设置为
none
或者不出现该选项,那么扩展被忽略,且不会被拷贝至证书中。若设置为copy
,那么任何没有预先出现在证书中的证书请求的扩展会被拷贝至证书中。若设置为copyall
,那么请求中的全部扩展都会被拷贝至证书中:若扩展已经出现在证书中,那么会先删除该扩展。首先参看 警告 节后再使用该参数。
该选项的主要用途时允许证书请求提供特定扩展的值,比如 subjectAltName。
策略段包含一系列变量,这些变量与特定的 DN 字段对应。若值为 match
,那么字段值必须匹配 CA 证书的相同值。若值为 supplied
那么它必须出现。若值为 optional
那么它可以出现。任何未提及的字段均会被静默地删除,除非使用了 -preserveDN
选项,不过,相较于期望的行为,这个行为不如说是一个副作用。
-spkac
命令行选项的输入是一个 Netscape 签名公钥和挑战码。它通常来自具有 KEYGEN 标签的 HTML 表单,该表单用于创建一个新的私钥。但是也可以通过 spkac 工具创建 SPKAC。
文件应该包含变量 SPKAC,其值应该设置未 SPKAC 的值,同时也要求作为名称值对的 DN 成分。如果你需要多次包含相同的成分,那么可以再它前面补充一个数字和一个点号 .
。
当处理 SPKAC 格式时,若使用了 -out
标旗,输出格式为 DER;若输出为标准输出,或者使用了 -outdir
标旗,那么使用 PEM 格式。
注意:这些案例假设已经建立了 ca
目录结构,且相关文件以及存在。这通常包括用 req
创建一个 CA 证书和私钥,一个序列号文件和一个空的索引文件,并将它们放置在相关的目录中。
要使用下方的案例配置文件,目录 demoCA
、demoCA/private
、demoCA/newcerts
应该被创建。CA 证书应该被拷贝为 demoCA/cacert.pem
,与之对应的私钥拷贝为 demoCA/private/cakey.pem
。一个文件 demoCA/serial 包含一个数,比如 01
,以及一个空的索引文件 demoCA/index.txt
。
签名一个证书请求:
openssl ca -in req.pem -out newcert.pem
用 CA 扩展,签名一个证书请求:
openssl ca -in req.pem -extensions v3_ca -out newcert.pem
生成一个 CRL
openssl ca -gencrl -out crl.pem
签名多个请求:
openssl ca -spkac spkac.txt
一个案例 SPKAC 文件(为了简洁,裁切了 SPKAC 行):
SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5
CN=Steve Test
[email protected]
0.OU=OpenSSL Group
1.OU=Another Group
具有与 ca
相关段的样例配置文件:
[ ca ]
default_ca = CA_default # The default ca section
[ CA_default ]
dir = ./demoCA # top dir
database = $dir/index.txt # index file.
new_certs_dir = $dir/newcerts # new certs dir
certificate = $dir/cacert.pem # The CA cert
serial = $dir/serial # serial no file
#rand_serial = yes # for random serial#'s
private_key = $dir/private/cakey.pem# CA private key
RANDFILE = $dir/private/.rand # random number file
default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = md5 # md to use
policy = policy_any # default policy
email_in_dn = no # Don't add the email into cert DN
name_opt = ca_default # Subject name display option
cert_opt = ca_default # Certificate display option
copy_extensions = none # Don't copy extensions from request
[ policy_any ]
countryName = supplied
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
注意:文件的位置可以通过下面的方法改变:编译时选项、配置文件条目、环境变量、或者命令行选项。下面的值表示默认值。
/usr/local/ssl/lib/openssl.cnf - master configuration file
./demoCA - main CA directory
./demoCA/cacert.pem - CA certificate
./demoCA/private/cakey.pem - CA private key
./demoCA/serial - CA serial number file
./demoCA/serial.old - CA serial number backup file
./demoCA/index.txt - CA text database file
./demoCA/index.txt.old - CA text database backup file
./demoCA/certs - certificate output file
./demoCA/.rnd - CA random seed information