ca

用途

  ca - 极小的CA应用程序样例。

用法

  openssl ca [-verbose] [-config filename] [-name section] [-gencrl] [-revoke file] [-status serial] [-updatedb] [-crl_reason reason] [-crl_hold instruction] [-crl_compromise time] [-crl_CA_compromise time] [-crldays days] [-crlhours hours] [-crlexts section] [-startdate date] [-enddate date] [-days arg] [-md arg] [-policy arg] [-keyfile arg] [-keyform PEM|DER] [-key arg] [-passin arg] [-cert file] [-selfsign] [-in file] [-out file] [-notext] [-outdir dir] [-infiles] [-spkac file] [-ss_cert file] [-preserveDN] [-noemailDN] [-batch] [-msie_hack] [-extensions section] [-extfile section] [-engine id] [-subj arg] [-utf8] [-multivalue-rdn]

描述

  ca是一个极小的CA应用程序。它可被用于签名各种证书请求及生成CRLs,它也包含了一个文本数据库,其中记录了已经发布的证书以及这些证书的状态。

下面以使用目来划分,描述其选项。

ca选项

-config filename

  指定要使用一个配置文件。

-name section

  指定使用配值文件中的字段(覆盖ca字段中的default_ca)。

-in filename

  输入一个文件名包含一个单一的,要通过CA签名的证书请求文件。

-ss_cert filename

  一个单一的,要通过CA签名的自签名的证书文件。

-spkac filename

  包含一个单一的Netscape格式的证书公钥值、挑战、附加域值的一个用于被CA签名的文件。查看SPKAC FORMAT字段关于对输入输出要求的相关信息。

-infiles

  如果使用此选项,则此选项应该在最后面使用,其后跟随的文件名参数都被认为包含有证书请求内容。

-out filename

  证书要输出到的输出文件。默认的是标准输出。证书的详情也会以PEM格式打印在这个文件中(除非-spkac的输出是DER格式)。

-outdir directory

  证书要输出到的目录。证书将被写入的文件名是由十六进制序号和“.pem”组成。

-cert

  CA证书文件。

-keyfile filename

  要签名的请求文件的私钥。

-keyform PEM|DER

  私钥文件中数据的格式。默认是PEM格式。

-key password

  用于加密私钥的密码。由于在某些系统中,命令行参数是显现可见的,因此使用此选项在输入密码时要多加小心。

-selfsign

  表明以颁发者的秘钥来签名此证书请求文件。证书请求若使用非自己的私钥进行签名,则将被忽略。如果指定了-spkac,-ss_cert或-gencrl选项,则忽略-selfsign。

-passin arg

  指定私钥口令来源。更多关于arg的信息查看openssl的PASSPHRASE ARGUMENTS字段。

-verbose

  打印将要执行的操作的额外详情。

-notext

  在证书文件中,不输出文本格式的证书信息。

-startdate date

  这个选项允许显示的设置证书生效时间。数据的格式是YYMMDDHHMMSSZ(和ASN1 UTCTime格式一样)。

-enddate date

  这个选项允许显示的设置证书失效时间。数据的格式是YYMMDDHHMMSSZ(和ASN1 UTCTime格式一样)。

-days arg

  设置证书有效期,arg为天数。

-md alg

  指定要使用的摘要算法。可能的值有md5,sha1和mdc2。这个选项也应用于CRLs。

-policy arg

  这个选项定义了CA使用的policy。这个policy在配置文件中是一个字段,这个字段决定了哪儿些域应该强制或匹配CA证书。检查POLICY FORMAT字段获取更多信息。

-msie_hack

  这是一个遗留的古老选项用来支持老的IE证书的“certenr3”等级控制。它几乎为所有事情使用UniversalString。自从老的控制存在各种各样的安全漏洞,这个选项就被强烈劝阻不要使用。新的“Xenroll”控制不需要这个选项。

-preserveDN

  通常一个证书的DN顺序和与它相关的政策字段中的顺序相同。当这个选项被设置时,顺序和请求文件中的相同。这主要是为了兼容老的IE控制的,新的Xenroll已经不需要这个了。

-noemailDN

  如果请求文件的DN字段存在一个EMAIL域,那么证书的DN是可以包含EMAIL的,但是将e-mail设置到证书扩展新息的altName中是一个很好的policy。当这个选项被设置后,MMAIL字段将从证书的主体部分删除,而只设置在最终的扩展中。可在配置文件中使用email_in_dn关键字来启用此功能。

-batch

  设置为批处理模式。在这个模式中,没有问题会被问,所有的证书请求文件会被自动的颁发。

-extensions section

  配置文件的这个字段包含了在颁发一个证书是要包含的扩展信息(默认用于x509_extensions,除非使用了-extfile选项)。如果不存在扩展字段,则一个V1格式证书被创建。如果扩展字段存在,则一个V3格式证书被创建。更多关于扩展字段格式的详情,查看:w x509v3_config手册页。

-extfile file

  一个扩展的配置文件用于证书扩展信息的读取(使用默认的字段,除非-extensions选项也被使用)。

-engine id

  指定一个引擎(通过其独特的id字符串),这使ca试图获得一个参考指定的引擎的功能,因此在需要时会初始化它。然后所有可用的算法都会被设置默认使用这个引擎。

-subj arg

  证书拥有者的信息值,取代证书请求文件中的申请者的信息值。格式必须为/CN=cn/O=test/OU=t/cn=forxy,忽略空格已经\后的字符。

-utf8

  表明任何输入都必须是utf8编码,默认为ASCII编码。这就意味着用户的终端输入和配置文件都必须是有效的UTF8字符串。


-multivalue-rdn

  当采用-subj参数时,支持多值RDN,比如:DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe。如果-multivalue-rdn没有被使用,UID的值为123456+CN=John Doe

CRL选项

-gencrl

  这个选项基于索引文件中的信息来生成一个CRL文件。

-crldays num

  距离接下来CRL到期的天数。即设置的是CRL中nextUpdate域的值。

-crlhours num

  距离接下来CRL到期的小时数。

-revokes filename

  包含了要撤销的证书的文件的名字。

-status serial

  显示指定的序列号的证书的撤销状态,同时退出。

-updatedb

  更新数据库索引来清除过期的证书。

-crl_reason reason

  设置CRLv2撤销原因,原因可以是:unspecifiedkeyCompromiseCACompromiseaffiliationChangedsupersededcessationOfOperationcertificateHold。这些原因区分大小写。匹配CRL中的原因有可能会造成程序迟钝。实际上,removeFromCRL不是特别的有效,因为它仅仅只能用于delta CRLs

-crl_hold instruction

  当crl撤销原因为certificateHold时(证书挂起),采用此项来指定用户行为。instruction的值可以是:holdInstructionNone、holdInstructionCallIssuer和holdInstructionReject。比如用选项:-crl_hold holdInstructionReject时,指明用户必须拒绝挂起的证书。

-crl_compromise time

  当crl撤销原因为keyCompromise时(密钥泄露),设置密钥泄露时间time。Time 采用通用时间格式:YYYYMMDDHHMMSSZ。

-crl_CA_compromise time

  当crl撤销原因为CACompromise时(CA被破坏,设置其时间,格式同-crl_compromise time。

-crlexts section

  指定CRL扩展项。section为配置文件中的段,如果不提供crl扩展项段,则生成第一版本的crl,如果提供,则生成第二版本的crl。

配置文件选项

 配置文件中包含ca操作的字段犹如下面的情况:如果-name命令行选项被使用,那么被指定的名称字段会被使用。否则想要使一个字段被使用,则必须被命名在配置文件中的在default_ca选项中的ca字段(或是在配置文件的默认字段中)。

许多配置文件选项和命令行选项是完全一致的。当配置文件和命令行中同时出现相同的选项时,命令行选项的内容会被采用。当一个命令被描述为强制性的,则它必须出现在配置文件中或是命令行中。

oid_file

  这个选项指定一个文件,包含了附加的OBJECT IDENTIFIERS。文件的每一行应该由对象标示符数字,空格,短名称,空格,长名称组成。

oid_section

  这个字段指定一个在配置文件包含了额外对象标示的字段。每一行应该由一个对象标识的段名称,随后跟着=,然后是数字。这个选项的段名称和长名称相同。

new_certs_dir

  和-outdir命令行选项一样。它指定了新的证书被放置的目录。限制性选项。

certificate

  和-cert一样。它指出一个包含CA证书的文件。强制性选项。

private_key

  等同-keyfile选项。包含了CA私钥的文件。强制性选项。

RANDFILE

  一个用来读写随机数种子信息或一个EGD套接字的文件。(查看RAND_egd)

default_days

  等同于-days选项。为一个证书签证的天数。

default_startdate

  等同于-startdate选项。一个证书的起效时间。如果不设置的话,默认为当前时间。

default_enddate

  等同于-enddate选项。这两个选项必须有一个被指定。

default_md

  等同于-md选项。要使用的信息摘要算法。强制性选项。

datebase

  要使用的文本数据库文件。强制性选项。这个文件被初始化为

unique_subject

  如果指定为yes,有效的证书实体在数据库中有唯一的申请者信息值。如果为no,多个有效的证书实体有可能有相同的申请者信息值。。默认是yes,为了和老版本兼容。为了让制作一个CA证书变得简单,推荐使用no,特别是与-selfsign命令一起使用时。

serial

  一个文本信息,包含了下一个即将使用的十六进制的证书序列号。这个文件必须被提出并且要包含一个有效的序列号。

crlnumber

  一个文本信息,包含了下一个即将使用的十六进制的CRL数值。如果这个文件存在,CRL中的数值将会被替代。如果这个文件被提出,则必须包含一个有效的CRL数值。

x509_extensions

  等同于-extensions

crl_extensions

  等同于-crlexts。

preserve

  等同于-preserverDN。

email_in_dn

  和-noemailDN一样,如果你想把EMAIL域从证书中移除掉,只要把这个通过这个选项设置‘no’即可。如果不指定,默认证书的DN存在EMAIL域。

mise_hack

  等同于-msie_hack

policy

  等同于-policy。强制性选项。更多信息请查看POLICY FORMAT字段。

name_opt,cert_opt

  这些选项允许在询问确定用户要进行签名时显示指定的格式。所有x509支持的-nameopt和certopt选项在此处都能使用,除非no_signame和no_sigdump选项被永久设置时不能使用。(这是因为由于证书未用此选项签名导致证书签名不能被显示。)

为了方便起见,ca_default值同时接受这两个选项以产生一个合理的输出。

  如果一个都不指定,则默认使用OpenSSL早期的格式。早期的格式是强烈不推荐的,因为它只显示字段中的policy部分,多字节也会显示残缺同时不显示扩展信息。

copy_extension

  决定证书请求文件中的扩展信息如何被处理。如果设为空,或不提供这个选项,name扩展信息会被忽略掉,并且不会被拷贝到证书中。如果设置拷贝,则请求中的任意不存在的扩展都将被拷贝到证书中。如果设置拷贝所有,那么请求中的所有扩展信息都会被拷贝到证书中:若有已存在的则先删除已存在的内容。使用此选项前先查看WARNINGS字段。

这个选项主要用于允许一个证书请求去支持像subjectAltName这样的值。

POLICY格式

  policy字段包含了一组类似证书DN域的值。如果它的值是“match”,则域值必须在证书中匹配相同的域值。如果他的值为"supplied",则它必须被提出。如果它的值为"optional",有可能会被提出。在policy字段中任何域不被提及则默默地删除掉,除非-preserveDN选项被提出,但是这就会被当做一个故意的行为。

SPACK格式

  输入的-spkac命令行选项是一个NetScape格式已经签名的公钥和一个挑战。它通常来源于KEYGEN标记,并在HTML表单中创建一个新的私钥。可以用spkac命令来创建SPKACS。

  这个文件必须包含变量SPKACS来设置SPKAC的值,也可以作为一个名字对来组成DN的一个部件。如果你需要包含同样的组件两次,可以在这之前添加一个数字或一个“.”。

示例

  注:这些示例是基于CA目录结构已经建立好和相关的文件已经存在。CA目录通常包含一个创建的CA证书,私钥中,一个序列号文件和一个空的主题文件。

建CA:

  在apps目录下sh ca.sh -newca 生成新CA,遇到提示,直接回车;

生成证书请求文件:

  [cpp] view plaincopy
  openssl req -new -out req.pem -keyout key.pem  
  openssl req -new -out req2.pem -keyout key2.pem  

签发一个证书请求文件:

  [cpp] view plaincopy
  openssl ca -in req.pem -out newcert.pem  

用CA额外信息来签发证书请求文件:

  [cpp] view plaincopy
  openssl ca -in req.pem -extensions v3_ca -out newcert.pem  

签发证书:

  [cpp] view plaincopy
  openssl ca -config /usr/local/ssl/openssl.cnf  -name CA_default -days 365 -md sha1 -policy policy_anything -cert demoCA/cacert.pem -in req.pem -out cert1.pem -preserveDN -noemailDN -subj /CN=CN/O=JS/OU=WX/cn=myname -extensions myexts  

撤销一个证书:

  [cpp] view plaincopy
  openssl ca -revoke cert2.pem   

生成crl,设置原因、挂起处理方法

  [cpp] view plaincopy
  openssl ca -gencrl -out crl.crl   
  openssl ca -gencrl -crl_reason keyCompromise -crl_compromise 20010101030303Z  -crl_hold holdInstructionReject -crl_CA_compromise  20020101030303Z -crldays 10 -out crl2.crl  
  生成一个crl时需要一个crlnumber,它是一个文本文件,内容为数字,比如:03。

验证一个Netscape格式的SPKAC:

  [cpp] view plaincopy
  openssl ca -spkac spkac.txt  

一个SPKAC文件实例如下:

  [cpp] view plaincopy
  SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5  
  CN=Steve Test   
  emailAddress=steve@openssl.org  
  0.OU=OpenSSL Group  
  1.OU=Another Group  

一个配置文件实例(与ca命令相关的字节如下):

  [cpp] view plaincopy
  [ 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  
  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  

环境变量

  OPENSSL_CONF文件反映了配置文件中的各个命令可以被命令行选项所改变。

限制

  文本数据库主题文件是一个处理的一部分,与固定值不同,它有可能会崩溃。理论上它有可能根据颁发者的证书和一个现存的CRL来重新构建主题文件:无论怎样限制没有选项来进行此项操作。
  V2 CRL的特点就像一个三角CRLs,不被支持。
  即使多个请求可以被输入和被处理,始终只能包含一个SPKAC或者自签名证书。

BUGS

  如果大量的证书被提出,则内存文本数据库会有问题发生。这就意味着者数据库将会在内存中保留。
  CA命令实际上需要重写或实际上函数暴露,当一个命令或者借口等级是一个友好的实体,它可以适当的处理事情。脚本CA.sh和CA.pl帮助了一些但不是很多。
  在请求文件中没有提出来的域在policy中被默默的删除。如果使用了-preserveDN选项这件事情将不会发生。为了实施在DN中不包含EMAIL域,在RFC中建议使用-noemailDN选项。

警告

  CA命令式古怪的也不友好。
  CA命令相当于是一个怎么操作CA的一个实例。它可以作为一个CA中心来使用。
  CA命令是一个有效的单一的用户命令:在各种各样的文件中它没有上锁,试图运行更多,CA命令在一些数据库上有一些不可预料的结果。
  copy_extensions选项使用起来必须小心。如果没有小心,则会冒着安全的风险。例如一个证书请求包含一个CA的basicConstraints额外信息:它的值为true,并且copy_extensions选项的值为copyall,当一个证书已经显示了且用户没有认出它,它将传递请求为一个有效的CA证书。
  在设置copy_extensions选项为copy时,这个选项可以被避免。在配置文件中包含basicConstraints的值为CA:FALSE。则请求文件中包含basicConstraints额外信息,则将它忽略掉。
  最可取的方法是包含其他额外信息的值例如keyUsage来阻止一个请求供应自己的值。
  附加的限制条件可以被CA证书自己放置。例如一个证书有:
  basicConstraints = CA:TRUE, pathlen:0
  则一个证书已经颁发,值为CA:TRUE,它将不会有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值