openssl命令中文版

更新时间:2023-06-25 18:43:43 阅读: 评论:0

openssl-指令 verify
用法:
   
    openssl verify -CApath directory -CAfile file -purpo purpo】【-untrusted file手机型号怎么看 -help -issuer_checks -verbo  - 足球解说员【certificates
   
     说明:
   
    证书验证工具。
     
    选项
     -CApath directory
    我们信任的CA的证书存放目录。这些证书的名称应该是这样的格式:
    xxxxxxxx.0( xxxxxxxx代表证书的哈希值。 参看x509指令的-hash)
    你也可以在目录里touch一些这样格式文件名的文件,符号连接到真正的证书。
    那么这个xxxxxxxx我怎么知道怎么得到?x509指令有说明。
    其实这样子就可以了:
    openssl x509 -hash -
   
    -CAfile file
    我们信任的CA的证书,里面可以有多个CA的证书。
   
    -untrusted file
    我们不信任的CA的证书。
   
    -purpo purpo
    以沫相濡证书的用途。如果这个option没有设置,那么不会对证书的CA链进行验证。
   
    现在这个option的参数有以下几个:
    sslclinet
    sslrver
    nssslrver
    smimesign
    smimeencrypt
    等下会详细解释的。
   
    -help
    打印帮助信息。
   
-verbo
   
    打印出详细的操作信息。
   
-issuer_checks
    打印出我们验证的证书的签发CA的证书的之间的联系。
    要一次验证多个证书,把那些证书名都写在后面就好了。
       
    验证操作解释:
    S/MIME和本指令使用完全相同的函数进行验证。
    我们进行的验证和真正的验证有个根本的区别:
    在我们对整个证书链进行验证的时候,即使中途有问题,我们也会验证到最后,而真实的验证一旦有一个环节出问题,那么整个验证过程就告吹。
    验证操作包括几个独立的步骤。
    首先建立证书链,从我们目前的证书为基础,一直上溯到Root CA的证书.
    如果中间有任何问题,比如找不到某个证书的颁发者的证书,那么这个步骤就挂。有任何一个证书是字签名的,就被认为是Root CA的证书。
    寻找一个证书的颁发CA也包过几个步骤。在openssl0.9.5a之前的版本,如果一个证书的颁发者和另一个证书的拥有着相同,就认为后一个证书的拥有者就是前一个证书的签名CA.
    openssl0.9.6及其以后的版本中,即使上一个条件成立,还要进行更多步骤的检验。包括验证系列号等。到底有哪几个我也没看明白。
    得到CA的名称之后首先去看看是否是不信任的CA, 如果不是,那么才去看看是否是信任的CA. 尤其是Root CA, 更是必须是在信任CA列表里面。
    现在得到链条上所有CA的名称和证书了,下一步是去检查第一个证书的用途是否和签发时候批准的一样。其他的证书则必须都是作为CA证书而颁发的。
    证书的用途在x509指令里会详细解释。
    过了第二步,现在就是检查对Root CA的信任了。可能Root CA也是每个都负责不同领域的证书签发。缺省的认为任何一个Root CA都是对任何用途的证书有签发权。
    最后一步,检查整条证书链的合法性。比如是否有任何一个证书过期了?签名是否是正确的?是否真的是由该证书的颁发者签名的?
    任何一步出问题,所有该证书值得怀疑,否则,证书检验通过。
   
    如果验证操作有问题了,那么打印出来的结果可能会让人有点模糊。山东省旅游景点
    一般如果出问题的话,会有类似这样子的结果打印出来:
    rver.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
    error 24 at 1 depth lookup:invalid CA certificate
    第一行说明哪个证书出问题,后面是其拥有者的名字,包括几个字段。
    第二行说明错误号,验证出错在第几层的证书,以及错误描述。
    下面是错误号及其描述的详细说明,注意,有的错误虽然有定义,
    但真正使用的时候永远不会出现。用unud标志.
    0 X509_V_OK
    验证操作没有问题
    2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
    找不到该证书的颁发CA的证书。
    3 X509_V_ERR_UNABLE_TO_GET_CRL (unud)
   找不到和该证书相关的CRL
   4 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
   无法解开证书里的签名。
    5 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE (unud)
    无法解开CRLs的签名。
    6 X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
    无法得到证书里的公共密钥信息。
    7 X509_V_ERR_CERT_SIGNATURE_FAILURE
    证书签名无效
    8 X509_V_ERR_CRL_SIGNATURE_FAILURE (unud)
    证书相关的CRL签名无效
    9 X509_V_ERR_CERT_NOT_YET_VALID
    证书还没有到有效开始时间
    10 X509_V_ERR_CRL_NOT_YET_VALID (unud)
    与证书相关的CRL还没有到有效开始时间
    11 X509_V_ERR_CERT_HAS_EXPIRED
    证书过期
    12 X509_V_ERR_CRL_HAS_EXPIRED (unud)
    与证书相关的CRL过期
    13 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
    证书的notBefore字段格式不对,就是说那个时间是非法格式。
    14 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
    证书的notAfter字段格式不对,就是说那个时间是非法格式。
    15 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD (unud)
    CRLlastUpdate字段格式不对。
    16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD (unud)
    CRLnextUpdate字段格式不对
    17 X509_V_ERR_OUT_OF_MEM
    操作时候内存不够。这和证书本身没有关系。
    18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
    需要验证的第一个证书就是字签名证书,而且不在信任CA证书列表中。
    19 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
    可以建立证书链,但在本地找不到他们的根??
   
    : lf signed certificate in certificate chain
    the certificate chain could be built up using the untrusted certificates
    but the root could not be found locally.
    20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
    有一个证书的签发CA的证书找不到。这说明可能是你的Root CA的证书列表不齐全。
    21 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
    证书链只有一个item, 但又不是字签名的证书。
    22 X509_V_ERR_CERT_CHAIN_TOO_LONG (unud)
    证书链太长。
    23 X509_V_ERR_CERT_REVOKED (unud)
    证书已经被CA宣布收回。
    24 X509_V_ERR_INVALID_CA
    CA的证书无效。
    25 X509_V_ERR_PATH_LENGTH_EXCEEDED
    参数basicConstraints pathlentgh超过规定长度
    26 X509_V_ERR_INVALID_PURPOSE
    提供的证书不能用于请求的用途。
    比如链条中某个证书应该是用来做CA证书的,但证书里面的该字段说明该证书不是用做CA证书的,就是这样子的情况。
    27 X509_V_ERR_CERT_UNTRUSTED
    Root CA的证书如果用在请求的用途是不被信任的。
    28 X509_V_ERR_CERT_REJECTED
    CA的证书根本不可以用做请求的用途。
    29 X509_V_ERR_SUBJECT_ISSUER_MISMATCH
    证书颁发者名称和其CA拥有者名称不相同。-issuer_checkst的时候可以检验出来。
    30 X509_V_ERR_AKID_SKID_MISMATCH
    证书的密钥标志和其颁发CA为其指定的密钥标志不同.
    31 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
    证书系列号与起颁发CA为其指定的系列号不同。
    32 X509_V_ERR_KEYUSAGE_NO_CERTSIGN
    CA的证书用途不包括为其他证书签名。
    50 X509_V_ERR_APPLICATION_VERIFICATION
    应用程序验证出错。
   

openssl-指令asn1par

    用法:openssl asn1par [-inform PEM|DER] [-in filename] [-out filename]
   
    [-noout] [-offt number] [-length number] [-i] [- structure filename]
   
    [-strpar offt]
   
用途:一个诊断工具,可以对ASN1结构的东东进行分析。
    ASN1是什么?一个用来描述对象的标准。要解释的话,文章可以比解释openssl结构的文章更长。有兴趣的话自己去网络上找来看吧。
   
-inform DER|PEM|TXT
    输入的格式,DER是二进制格式,PEMba64编码格式,TXT不用解释了吧
   
-in filename
    输入文件的名称,缺省为标准输入。
   
    -out filename
    输入文件的名称,输入一般都是DER数据。如果没这个项,就没有东西输入咯。该项一般都要和-strpar一起使用。
   
    -noout
        不打印参数编码的版本信息。
-offt number
    从文件的那里开始分析,看到offt就应该知道是什么意思了吧。
   
    -length number
    一共分析输入文件的长度的多少,缺省是一直分析到文件结束。
   
    -i
    根据输出的数据自动缩进。
   
    - structure filename
    当你输入的文件包含有附加的对象标志符的时候,使用这个。
    这种文件的格式在后面会介绍。
   
    -strpar offt
    从由offt指定的偏移量开始分析ASN1对象。当你碰到一个嵌套的对象时,可以反复使用这个项来一直进到里面的结构捏出你需要的东东。
    一般分析完之后输入的东东如下:
    openssl asn1par -out temp.ans -i -inform pem <
   
    0:d=0 hl=4 l= 881 cons: SEQUENCE
   
    4:d=1 hl=4 l= 730 cons: SEQUENCE
   
    ... ....
   
    172:d=3 hl=2 l= 13 prim: UTCTIME :000830074155Z
   
    187:d=3 hl=2 l= 13 prim: UTCTIME :010830074155Z
   
    202:d=2 hl=3 l= 136 cons: SEQUENCE
   
    205:d=3 hl=2 l= 11 cons: SET
   
    ... ...
   
    359:d=3 hl=3 l= 141 prim: BIT STRING
   
    ... ...
    本例是一个自签名的证书。每一行的开始是对象在文件里的偏移量。d=xx是结构嵌套的深度。知道ASN1结构的人应该知道,每一个SET或者SEQUENCE都会让嵌套深度增加1.
    hl=xx表示当前类型的header的长度。1=xx表示内容的八进制的长度。
    -i可以让输出的东西容易懂一点。
    如果没有ASN.1的知识,可以省略看这一章。
    本例中359行就是证书里的公共密钥。可以用-strpar来看看
    openssl asn1par -out temp.ans -i -inform pem -strpar 359 <
   
    0:d=0 hl=3 l= 137 cons: SEQUENCE
   
    3:d=1 hl=3 l= 129 prim: INTEGER :C0D802B4C084B20569C619C0FDF
   
    466EEB7980920A408D51DA22C20427AC32488665D931C41E3274912DE2F25C8CA9C97B75
   
    415C01794B622DBEADD92DA068C140C3AD387BF5FDC9A8D2FCEE7F7F3E36B0194994FD67
   
    07897C8969F16F6ECB3F03BF985E910817160FE5DCBF874B1C0DBD06A568E130DA7C9FE3
   
    9FE7A7F421369
   
    135:d=1 hl=2 l= 3 prim: INTEGER :010001
    不要试图去看temp.ans的内容,是二进制来的,看不懂的。
openssl-指令ca()
用途:
    模拟CA行为的工具.有了它,你就是一个CA,不过估计是nobody trusted CA.可以用来给各种格式的CSR签名,用来产生和维护CRL(不记得CRL是什么了?去看证书那一章).他还维护着一个文本数据库,记录了所有经手颁发的证书及那些证书的状态。
    用法:
    openssl ca [-verbo] [-config filename] [-name ction] [-gencrl]
   
    [-revoke file] [-crldays days] [-crlhours hours] [-crlexts ction]
   
    [-startdate date] [-enddate date] [-days arg] [-md arg] [-policy arg]
   
    [-keyfile arg] [-key arg] [-passin arg] [-cert file] [-in file]
   
    [-out file] [-notext] [-outdir dir] [-infiles] [-spkac file]
   
    [-ss_cert file] [-prerveDN] [-batch] [-msie_hack] [-extensions ction]
    哇噻,好复杂也。不过用过GCC的人应该觉得这么点flag还是小ca.
   
-config filename
    指定使用的configure文件。
   
    -in filename
    要签名的CSR文件。
   
    -ss_cert filename
    一个有自签名的证书,需要我们CA签名,就从这里输入文件名。
   
    -spkac filename
    这一段实在没有看懂,也没兴趣,估计和SPKAC打交道可能性不大,奉送上英文原文。
    a file containing a single Netscape signed public key and challenge and additional field values to be signed by the CA.
SPKAC FORMAT
    The input to the -spkac command line option is a Netscape signed public key and challenge. This will usually come from the KEYGEN tag in an HTML form to create a new private key. It is however possible to create SPKACs using the spkac utility.
    The file should contain the variable SPKAC t to the value of the SPKAC and also the required DN components as name value pairs. If you need to include the same component twice then it can be preceded by a number and a .
    -infiles
    如果你一次要给几个CSR签名,就用这个来输入,但记得这个选项一定要放在最后。这个项后面的所有东东都被认为是CSR文件名参数。
    -out filename
    签名后的证书文件名。证书的细节也会给写进去。
    -outdir directory
    摆证书文件的目录。证书名就是该证书的系列号,后缀是.pem
    -cert
    CA本身的证书文件名
    -keyfile filename
    CA自己的私有密钥文件
    -key password
罗少奇    CA的私有密钥文件的保护密码。
    在有的系统上,可以用ps看到你输入的指令,所以这个参数要小心点用。
    -passin arg
田七牙膏    也是一个输入私有密钥保护文件的保护密码的一种方式,可以是文件名,设备名或者是有名管道。程序会把该文件的第一行作为密码读入。(也蛮危险的)。
    -verbo
    操作过程被详细printf出来
    -notext
    不要把证书文件的明文内容输出到文件中去。
    -startdate date
    指明证书的有效开始日期。格式是YYMMDDHHMMSSZ, ASN1UTCTime结构相同。
    -enddate date
    指明证书的有效截止日期,格式同上。
    -days arg
    指明给证书的有效时间,比如365天。
    -md alg
    签名用的哈希算法,比如MD2, MD5等。
    -policy arg
    指定CA使用的策略。其实很简单,就是决定在你填写信息生成CSR的时候,哪些信息是我们必须的,哪些不是。看看蒜蓉粉丝龙虾config文件里面的policy这个item就明白了。
    -msie_hack
    为了和及其古老的证书版本兼容而做出的牺牲品,估计没人会用的,不解释了。
    -prerveDN
    -msie_hack差不多的一个选项。
    -batch
    设置为批处理的模式,所有的CSR会被自动处理。
    -extensions ction
    我们知道一般我们都用X509格式的证书,X509也有几个版本的。如果你在这个选项后面带的那个参数在config文件里有同样名称的key,那么就颁发X509V3证书,否则颁发X509v1证书。
    还有几个关于CRL的选项,但我想一般很少人会去用。我自己也没兴趣去研究。
    有兴趣的自己看看英文吧。
       
    CRL OPTIONS
     -gencrl
        this option generates a CRL bad on information in the index file.
     -crldays num
        the number of days before the next CRL is due. That is the days from
        now to place in the CRL nextUpdate field.
    -crlhours num     
    the number of hours before the next CRL is due.
  -revoke filename     
    a filename containing a certificate to revoke.         
    -crlexts ction     
    the ction of the configuration file containing CRL extensions to     
    include. If no CRL extension ction is prent then a V1 CRL is created,     
    if the CRL extension ction is prent (even if it is empty) then a V2     
    CRL is created. The CRL extensions specified are CRL extensions and not     
    CRL entry extensions. It should be noted that some software (for example     
    Netscape) can't handle V2 CRLs.
   
    相信刚才大家都看到很多选项都和config文件有关,那么我们来解释一下config文件make install之后,openssl会生成一个全是缺省值的config文件:opensslf.也长的很,贴出来有赚篇幅之嫌,xgh不屑。简单解释一下其中与CA有关的key.
CA有关的key都在ca这个ction之中。
    [ ca ]
    default_ca = CA_default
    [ CA_default ]
    dir = ./demoCA # Where everything is kept
    certs = $dir/certs # Where the issued certs are kept
    crl_dir = $dir/crl # Where the issued crl are kept
    databa = $ # databa index file.
    new_certs_dir = $dir/newcerts # default place for new certs.
    certificate = $dir/cacert.pem # The CA certificate
    rial = $dir/rial # The current rial number
    crl = $dir/crl.pem # The current CRL
    private_key = $dir/private/cakey.pem# The private key
    RANDFILE = $dir/private/.rand # private random number file
    x509_extensions = usr_cert # The extentions to add to the cert
    # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
    # so this is commented out by default to leave a V1 CRL.
    # crl_extensions = crl_ext 美女侧脸
    default_days = 365 # how long to certify for
    default_crl_days= 30 # how long before next CRL
    default_md = md5 # which md to u.
    prerve = no # keep pasd DN ordering
    # A few difference way of specifying how similar the request should look
    # For type CA, the listed attributes must be the same, and the optional
    # and supplied fields are just that :-)
    policy = policy_match
    # For the CA policy
    [ policy_match ]
    countryName = match
    stateOrProvinceName = match
    organizationName = match
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional
    # At this point in time, you must list all acceptable 'object'
    # types.
    [ policy_anything ]
    countryName = optional
    stateOrProvinceName = optional
    localityName = optional
    organizationName = optional
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional
    config文件里CA ction里面的很多key都和命令行参数是对应的。
    如果某个key后面标明mandatory,那就说明这个参数是必须提供的,无论你通过命令行还是通过config文件去提供。
   

本文发布于:2023-06-25 18:43:43,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1054655.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:证书   文件   验证   输入   签名   颁发
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图