openssl简介(六)--指令 verify(转)

openssl简介(六)--指令 verify

 

六.     指令 verify

用法:
   
    openssl verify
-CApath directory -CAfile file -purpose purpose 】【 -untrusted file -help -issuer_checks -verbose    - certificates
   
     
说明:
   
     
证书验证工具。
     
   
选项
     -CApath directory
   
我们信任的 CA 的证书存放目录。这些证书的名称应该是这样的格式:
    xxxxxxxx.0( xxxxxxxx
代表证书的哈希值。 参看 x509 指令的 -hash)
   
你也可以在目录里 touch 一些这样格式文件名的文件,符号连接到真正的证书。
   
那么这个 xxxxxxxx 我怎么知道怎么得到? x509 指令有说明。
   
其实这样子就可以了:
    openssl x509 -hash -in server.crt
   
    -CAfile file
   
我们信任的 CA 的证书,里面可以有多个 CA 的证书。
   
    -untrusted file
   
我们不信任的 CA 的证书。
   
    -purpose purpose
   
证书的用途。如果这个 option 没有设置,那么不会对证书的 CA 链进行验证。
   
   
现在这个 option 的参数有以下几个:
    sslclinet
    sslserver
    nssslserver
    smimesign
    smimeencrypt
   
等下会详细解释的。
   
    -help
   
打印帮助信息。
   
-verbose
   
     
打印出详细的操作信息。
   
-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 都是对任何用途的证书有签发权。
   
最后一步,检查整条证书链的合法性。比如是否有任何一个证书过期了?签名是否是正确的?是否真的是由该证书的颁发者签名的?
   
任何一步出问题,所有该证书值得怀疑,否则,证书检验通过。
   
     
如果验证操作有问题了,那么打印出来的结果可能会让人有点模糊。
   
一般如果出问题的话,会有类似这样子的结果打印出来:
    server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
    error 24 at 1 depth lookup:invalid CA certificate
   
第一行说明哪个证书出问题,后面是其拥有者的名字,包括几个字段。
   
第二行说明错误号,验证出错在第几层的证书,以及错误描述。
   
下面是错误号及其描述的详细说明 , 注意,有的错误虽然有定义,
   
但真正使用的时候永远不会出现。用 unused 标志 .
    0 X509_V_OK
   
验证操作没有问题
    2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
   
找不到该证书的颁发 CA 的证书。
    3 X509_V_ERR_UNABLE_TO_GET_CRL (unused)
   
找不到和该证书相关的 CRL
   4 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
   
无法解开证书里的签名。
    5 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE (unused)
   
无法解开 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 (unused)
   
证书相关的 CRL 签名无效
    9 X509_V_ERR_CERT_NOT_YET_VALID
   
证书还没有到有效开始时间
    10 X509_V_ERR_CRL_NOT_YET_VALID (unused)
   
与证书相关的 CRL 还没有到有效开始时间
    11 X509_V_ERR_CERT_HAS_EXPIRED
   
证书过期
    12 X509_V_ERR_CRL_HAS_EXPIRED (unused)
   
与证书相关的 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 (unused)
    CRL
lastUpdate 字段格式不对。
    16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD (unused)
    CRL
nextUpdate 字段格式不对
    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
   
可以建立证书链,但在本地找不到他们的根??
   
    : self 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 (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_checksset 的时候可以检验出来。
    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
   
应用程序验证出错。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenSSL是一个开源的加密工具包,可以用于验证私钥证书。 在命令行中,使用openssl s_server -msg -verify命令可以执行验证私钥证书的操作。 -msg参数可以指定在连接中发送和接收的消息。 -verify参数用于启用验证模式。 在执行该命令时,OpenSSL会作为服务器运行,等待客户端连接。然后,OpenSSL会将所收到的消息打印出来。在验证模式下,OpenSSL会尝试验证客户端发送的证书。 在验证过程中,OpenSSL会使用传入的私钥和证书进行验证。私钥用于解密证书中的数字签名,并与证书中的公钥进行比对,以验证证书的真实性和完整性。 如果验证成功,OpenSSL会打印出相关验证信息。如果验证失败,OpenSSL会显示相应的错误信息,指示证书存在问题或不是一个有效的证书。 通过使用openssl s_server -msg -verify命令,我们可以方便地验证私钥证书,以确保其有效性和安全性。 需要注意的是,验证私钥证书需要在合适的环境中进行,并且应该使用正确的私钥和证书进行验证,以确保验证的准确性和可靠性。 ### 回答2: openssl s_server -msg -verify是一条命令,用于在openssl中进行私钥证书验证。 首先,我们需要了解openssl中私钥和证书的概念。私钥是一种用于加密和解密数据的密钥,它通常由证书颁发机构(CA)生成并颁发给特定的实体。而证书是由CA签名的包含实体公钥和其他相关信息的文件,它用于验证实体的身份。 使用openssl s_server -msg -verify命令时,我们可以在服务器模式下进行私钥证书验证。这个命令会打开一个服务器,并监听指定的端口,等待客户端连接。当客户端连接之后,服务器会使用私钥和证书对收到的数据进行验证。 私钥证书验证的过程如下: 1.服务器使用私钥解密收到的数据。 2.服务器使用证书验证解密后的数据的完整性和真实性。通过计算数据的散列值以及使用证书中的公钥验证该散列值,服务器可以确定数据是否被篡改过。 3.如果数据通过了验证,服务器会对数据进行响应。 使用openssl s_server -msg -verify命令可以方便地进行私钥证书验证,同时可以通过命令行参数调整验证的具体设置。这对于建立安全的网络连接和验证实体身份非常有用。 需要注意的是,私钥和证书的安全性非常重要。私钥应该保密且仅由合法的实体使用,证书应该由可信的CA签发。同时,定期更新证书和私钥也是很重要的安全措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值