openssl命令中文版.docx
- 文档编号:17940891
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:71
- 大小:60.59KB
openssl命令中文版.docx
《openssl命令中文版.docx》由会员分享,可在线阅读,更多相关《openssl命令中文版.docx(71页珍藏版)》请在冰点文库上搜索。
openssl命令中文版
openssl-指令verify
用法:
opensslverify【-CApathdirectory】【-CAfilefile】【-purposepurpose】【-untrustedfile】【-help】【-issuer_checks】【-verbose】【-】【certificates】
说明:
证书验证工具。
选项
-CApathdirectory
我们信任的CA的证书存放目录。
这些证书的名称应该是这样的格式:
xxxxxxxx.0(xxxxxxxx代表证书的哈希值。
参看x509指令的-hash)
你也可以在目录里touch一些这样格式文件名的文件,符号连接到真正的证书。
那么这个xxxxxxxx我怎么知道怎么得到?
x509指令有说明。
其实这样子就可以了:
opensslx509-hash-inserver.crt
-CAfilefile
我们信任的CA的证书,里面可以有多个CA的证书。
-untrustedfile
我们不信任的CA的证书。
-purposepurpose
证书的用途。
如果这个option没有设置,那么不会对证书的CA链进行验证。
现在这个option的参数有以下几个:
sslclinet
sslserver
nssslserver
smimesign
smimeencrypt
等下会详细解释的。
-help
打印帮助信息。
-verbose
打印出详细的操作信息。
-issuer_checks
打印出我们验证的证书的签发CA的证书的之间的联系。
要一次验证多个证书,把那些证书名都写在后面就好了。
验证操作解释:
S/MIME和本指令使用完全相同的函数进行验证。
我们进行的验证和真正的验证有个根本的区别:
在我们对整个证书链进行验证的时候,即使中途有问题,我们也会验证到最后,而真实的验证一旦有一个环节出问题,那么整个验证过程就告吹。
验证操作包括几个独立的步骤。
首先建立证书链,从我们目前的证书为基础,一直上溯到RootCA的证书.
如果中间有任何问题,比如找不到某个证书的颁发者的证书,那么这个步骤就挂。
有任何一个证书是字签名的,就被认为是RootCA的证书。
寻找一个证书的颁发CA也包过几个步骤。
在openssl0.9.5a之前的版本,如果一个证书的颁发者和另一个证书的拥有着相同,就认为后一个证书的拥有者就是前一个证书的签名CA.
openssl0.9.6及其以后的版本中,即使上一个条件成立,还要进行更多步骤的检验。
包括验证系列号等。
到底有哪几个我也没看明白。
得到CA的名称之后首先去看看是否是不信任的CA,如果不是,那么才去看看是否是信任的CA.尤其是RootCA,更是必须是在信任CA列表里面。
现在得到链条上所有CA的名称和证书了,下一步是去检查第一个证书的用途是否和签发时候批准的一样。
其他的证书则必须都是作为CA证书而颁发的。
证书的用途在x509指令里会详细解释。
过了第二步,现在就是检查对RootCA的信任了。
可能RootCA也是每个都负责不同领域的证书签发。
缺省的认为任何一个RootCA都是对任何用途的证书有签发权。
最后一步,检查整条证书链的合法性。
比如是否有任何一个证书过期了?
签名是否是正确的?
是否真的是由该证书的颁发者签名的?
任何一步出问题,所有该证书值得怀疑,否则,证书检验通过。
如果验证操作有问题了,那么打印出来的结果可能会让人有点模糊。
一般如果出问题的话,会有类似这样子的结果打印出来:
server.pem:
/C=AU/ST=Queensland/O=CryptSoftPtyLtd/CN=TestCA(1024bit)
error24at1depthlookup:
invalidCAcertificate
第一行说明哪个证书出问题,后面是其拥有者的名字,包括几个字段。
第二行说明错误号,验证出错在第几层的证书,以及错误描述。
下面是错误号及其描述的详细说明,注意,有的错误虽然有定义,
但真正使用的时候永远不会出现。
用unused标志.
0X509_V_OK
验证操作没有问题
2X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
找不到该证书的颁发CA的证书。
3X509_V_ERR_UNABLE_TO_GET_CRL(unused)
找不到和该证书相关的CRL
4X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
无法解开证书里的签名。
5X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE(unused)
无法解开CRLs的签名。
6X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
无法得到证书里的公共密钥信息。
7X509_V_ERR_CERT_SIGNATURE_FAILURE
证书签名无效
8X509_V_ERR_CRL_SIGNATURE_FAILURE(unused)
证书相关的CRL签名无效
9X509_V_ERR_CERT_NOT_YET_VALID
证书还没有到有效开始时间
10X509_V_ERR_CRL_NOT_YET_VALID(unused)
与证书相关的CRL还没有到有效开始时间
11X509_V_ERR_CERT_HAS_EXPIRED
证书过期
12X509_V_ERR_CRL_HAS_EXPIRED(unused)
与证书相关的CRL过期
13X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
证书的notBefore字段格式不对,就是说那个时间是非法格式。
14X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
证书的notAfter字段格式不对,就是说那个时间是非法格式。
15X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD(unused)
CRL的lastUpdate字段格式不对。
16X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD(unused)
CRL的nextUpdate字段格式不对
17X509_V_ERR_OUT_OF_MEM
操作时候内存不够。
这和证书本身没有关系。
18X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
需要验证的第一个证书就是字签名证书,而且不在信任CA证书列表中。
19X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
可以建立证书链,但在本地找不到他们的根?
?
:
selfsignedcertificateincertificatechain
thecertificatechaincouldbebuiltupusingtheuntrustedcertificates
buttherootcouldnotbefoundlocally.
20X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
有一个证书的签发CA的证书找不到。
这说明可能是你的RootCA的证书列表不齐全。
21X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
证书链只有一个item,但又不是字签名的证书。
22X509_V_ERR_CERT_CHAIN_TOO_LONG(unused)
证书链太长。
23X509_V_ERR_CERT_REVOKED(unused)
证书已经被CA宣布收回。
24X509_V_ERR_INVALID_CA
某CA的证书无效。
25X509_V_ERR_PATH_LENGTH_EXCEEDED
参数basicConstraintspathlentgh超过规定长度
26X509_V_ERR_INVALID_PURPOSE
提供的证书不能用于请求的用途。
比如链条中某个证书应该是用来做CA证书的,但证书里面的该字段说明该证书不是用做CA证书的,就是这样子的情况。
27X509_V_ERR_CERT_UNTRUSTED
RootCA的证书如果用在请求的用途是不被信任的。
28X509_V_ERR_CERT_REJECTED
CA的证书根本不可以用做请求的用途。
29X509_V_ERR_SUBJECT_ISSUER_MISMATCH
证书颁发者名称和其CA拥有者名称不相同。
-issuer_checks被set的时候可以检验出来。
30X509_V_ERR_AKID_SKID_MISMATCH
证书的密钥标志和其颁发CA为其指定的密钥标志不同.
31X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
证书系列号与起颁发CA为其指定的系列号不同。
32X509_V_ERR_KEYUSAGE_NO_CERTSIGN
某CA的证书用途不包括为其他证书签名。
50X509_V_ERR_APPLICATION_VERIFICATION
应用程序验证出错。
openssl-指令asn1parse
用法:
opensslasn1parse[-informPEM|DER][-infilename][-outfilename]
[-noout][-offsetnumber][-lengthnumber][-i][-structurefilename]
[-strparseoffset]
用途:
一个诊断工具,可以对ASN1结构的东东进行分析。
ASN1是什么?
一个用来描述对象的标准。
要解释的话,文章可以比解释openssl结构的文章更长。
有兴趣的话自己去网络上找来看吧。
-informDER|PEM|TXT
输入的格式,DER是二进制格式,PEM是base64编码格式,TXT不用解释了吧
-infilename
输入文件的名称,缺省为标准输入。
-outfilename
输入文件的名称,输入一般都是DER数据。
如果没这个项,就没有东西输入咯。
该项一般都要和-strparse一起使用。
-noout
不打印参数编码的版本信息。
-offsetnumber
从文件的那里开始分析,看到offset就应该知道是什么意思了吧。
-lengthnumber
一共分析输入文件的长度的多少,缺省是一直分析到文件结束。
-i
根据输出的数据自动缩进。
-structurefilename
当你输入的文件包含有附加的对象标志符的时候,使用这个。
这种文件的格式在后面会介绍。
-strparseoffset
从由offset指定的偏移量开始分析ASN1对象。
当你碰到一个嵌套的对象时,可以反复使用这个项来一直进到里面的结构捏出你需要的东东。
一般分析完之后输入的东东如下:
opensslasn1parse-outtemp.ans-i-informpem 0: d=0hl=4l=881cons: SEQUENCE 4: d=1hl=4l=730cons: SEQUENCE ....... 172: d=3hl=2l=13prim: UTCTIME: 000830074155Z 187: d=3hl=2l=13prim: UTCTIME: 010830074155Z 202: d=2hl=3l=136cons: SEQUENCE 205: d=3hl=2l=11cons: SET ...... 359: d=3hl=3l=141prim: BITSTRING ...... 本例是一个自签名的证书。 每一行的开始是对象在文件里的偏移量。 d=xx是结构嵌套的深度。 知道ASN1结构的人应该知道,每一个SET或者SEQUENCE都会让嵌套深度增加1. hl=xx表示当前类型的header的长度。 1=xx表示内容的八进制的长度。 -i可以让输出的东西容易懂一点。 如果没有ASN.1的知识,可以省略看这一章。 本例中359行就是证书里的公共密钥。 可以用-strparse来看看 opensslasn1parse-outtemp.ans-i-informpem-strparse359 0: d=0hl=3l=137cons: SEQUENCE 3: d=1hl=3l=129prim: INTEGER: C0D802B4C084B20569C619C0FDF 466EEB7980920A408D51DA22C20427AC32488665D931C41E3274912DE2F25C8CA9C97B75 415C01794B622DBEADD92DA068C140C3AD387BF5FDC9A8D2FCEE7F7F3E36B0194994FD67 07897C8969F16F6ECB3F03BF985E910817160FE5DCBF874B1C0DBD06A568E130DA7C9FE3 9FE7A7F421369 135: d=1hl=2l=3prim: INTEGER: 010001 不要试图去看temp.ans的内容,是二进制来的,看不懂的。 openssl-指令ca (一) 用途: 模拟CA行为的工具.有了它,你就是一个CA,不过估计是nobodytrustedCA.可以用来给各种格式的CSR签名,用来产生和维护CRL(不记得CRL是什么了? 去看证书那一章).他还维护着一个文本数据库,记录了所有经手颁发的证书及那些证书的状态。 用法: opensslca[-verbose][-configfilename][-namesection][-gencrl] [-revokefile][-crldaysdays][-crlhourshours][-crlextssection] [-startdatedate][-enddatedate][-daysarg][-mdarg][-policyarg] [-keyfilearg][-keyarg][-passinarg][-certfile][-infile] [-outfile][-notext][-outdirdir][-infiles][-spkacfile] [-ss_certfile][-preserveDN][-batch][-msie_hack][-extensionssection] 哇噻,好复杂也。 不过用过GCC的人应该觉得这么点flag还是小case. -configfilename 指定使用的configure文件。 -infilename 要签名的CSR文件。 -ss_certfilename 一个有自签名的证书,需要我们CA签名,就从这里输入文件名。 -spkacfilename 这一段实在没有看懂,也没兴趣,估计和SPKAC打交道可能性不大,奉送上英文原文。 afilecontainingasingleNetscapesignedpublickeyandchallengeandadditionalfieldvaluestobesignedbytheCA. SPKACFORMAT Theinputtothe-spkaccommandlineoptionisaNetscapesignedpublickeyandchallenge.ThiswillusuallycomefromtheKEYGENtaginanHTMLformtocreateanewprivatekey.ItishoweverpossibletocreateSPKACsusingthespkacutility. ThefileshouldcontainthevariableSPKACsettothevalueoftheSPKACandalsotherequiredDNcomponentsasnamevaluepairs.Ifyouneedtoincludethesamecomponenttwicethenitcanbeprecededbyanumberanda. -infiles 如果你一次要给几个CSR签名,就用这个来输入,但记得这个选项一定要放在最后。 这个项后面的所有东东都被认为是CSR文件名参数。 -outfilename 签名后的证书文件名。 证书的细节也会给写进去。 -outdirdirectory 摆证书文件的目录。 证书名就是该证书的系列号,后缀是.pem -cert CA本身的证书文件名 -keyfilefilename CA自己的私有密钥文件 -keypassword CA的私有密钥文件的保护密码。 在有的系统上,可以用ps看到你输入的指令,所以这个参数要小心点用。 -passinarg 也是一个输入私有密钥保护文件的保护密码的一种方式,可以是文件名,设备名或者是有名管道。 程序会把该文件的第一行作为密码读入。 (也蛮危险的)。 -verbose 操作过程被详细printf出来 -notext 不要把证书文件的明文内容输出到文件中去。 -startdatedate 指明证书的有效开始日期。 格式是YYMMDDHHMMSSZ,同ASN1的UTCTime结构相同。 -enddatedate 指明证书的有效截止日期,格式同上。 -daysarg 指明给证书的有效时间,比如365天。 -mdalg 签名用的哈希算法,比如MD2,MD5等。 -policyarg 指定CA使用的策略。 其实很简单,就是决定在你填写信息生成CSR的时候,哪些信息是我们必须的,哪些不是。 看看config文件里面的policy这个item就明白了。 -msie_hack 为了和及其古老的证书版本兼容而做出的牺牲品,估计没人会用的,不解释了。 -preserveDN 和-msie_hack差不多的一个选项。 -batch 设置为批处理的模式,所有的CSR会被自动处理。 -extensionssection 我们知道一般我们都用X509格式的证书,X509也有几个版本的。 如果你在这个选项后面带的那个参数在config文件里有同样名称的key,那么就颁发X509V3证书,否则颁发X509v1证书。 还有几个关于CRL的选项,但我想一般很少人会去用。 我自己也没兴趣去研究。 有兴趣的自己看看英文吧。 CRLOPTIONS -gencrl thisoptiongeneratesaCRLbasedoninformationintheindexfile. -crldaysnum thenumberofdaysbeforethenextCRLisdue.Thatisthedaysfrom nowtoplaceintheCRLnextUpdatefield. -crlhoursnum thenumberofhoursbeforethenextCRLis
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- openssl 命令 中文版