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 (unused) 证书链太长。
23 X509_V_ERR_CERT_REVOKED (unused) 证书已经被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_checks被set的时候可以检验出来。 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简介-指令asn1parse
用法:openssl asn1parse [-inform PEM|DER] [-in filename] [-out filename]
[-noout] [-offset number] [-length number] [-i] [- structure filename]
[-strparse offset]
用途:一个诊断工具,可以对ASN1结构的东东进行分析。[/b:710d397eff]
ASN1是什么?一个用来描述对象的标准。要解释的话,文章可以比解释openssl结构的文章更长。有兴趣的话自己去网络上找来看吧。
-inform DER|PEM|TXT
输入的格式,DER是二进制格式,PEM是base64编码格式,TXT不用解释了吧
-in filename
输入文件的名称,缺省为标准输入。
-out filename
输入文件的名称,输入一般都是DER数据。如果没这个项,就没有东西输入咯。该项一般都要和-strparse一起使用。
-noout
不要输出任何东西(不明白有什么用)
-offset number
从文件的那里开始分析,看到offset就应该知道是什么意思了吧。
-length number
一共分析输入文件的长度的多少,缺省是一直分析到文件结束。 -i
根据输出的数据自动缩进。
- structure filename
当你输入的文件包含有附加的对象标志符的时候,使用这个。 这种文件的格式在后面会介绍。
-strparse offset
从由offset指定的偏移量开始分析ASN1对象。当你碰到一个嵌套的对象时,可以反复使用这个项来一直进到里面的结构捏出你需要的东东。 一般分析完之后输入的东东如下:
openssl asn1parse -out temp.ans -i -inform pem < server.crt
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行就是证书里的公共密钥。可以用-strparse来看看 openssl asn1parse -out temp.ans -i -inform pem -strparse 359 < server.crt
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 [-verbose] [-config filename] [-name section] [-gencrl]
[-revoke file] [-crldays days] [-crlhours hours] [-crlexts section]
[-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] [-preserveDN] [-batch] [-msie_hack] [-extensions section] [/b:f3a6bcf2f5] 哇噻,好复杂也。不过用过GCC的人应该觉得这么点flag还是小case.
-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 set 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
也是一个输入私有密钥保护文件的保护密码的一种方式,可以是文件名,设备名或者是有名管道。程序会把该文件的第一行作为密码读入。(也蛮危险的)。 -verbose
操作过程被详细printf出来
-notext
不要把证书文件的明文内容输出到文件中去。
-startdate date
指明证书的有效开始日期。格式是YYMMDDHHMMSSZ, 同ASN1的UTCTime结构相同。
-enddate date
指明证书的有效截止日期,格式同上。 -days arg
指明给证书的有效时间,比如365天。 -md alg
签名用的哈希算法,比如MD2, MD5等。
-policy arg
指定CA使用的策略。其实很简单,就是决定在你填写信息生成CSR的时候,哪些信息是我们必须的,哪些不是。看看config文件里面的policy这个item就明白了。
-msie_hack
为了和及其古老的证书版本兼容而做出的牺牲品,估计没人会用的,不解释了。 -preserveDN
和-msie_hack差不多的一个选项。
-batch
设置为批处理的模式,所有的CSR会被自动处理。
-extensions section
我们知道一般我们都用X509格式的证书,X509也有几个版本的。如果你在这个选项后面带的那个参数在config文件里有同样名称的key,那么就颁发X509V3证书,否则颁发X509v1证书。
还有几个关于CRL的选项,但我想一般很少人会去用。我自己也没兴趣去研究。 有兴趣的自己看看英文吧。