我持有由CA1证书签署的客户端证书“A”。CA1证书由根证书签署。
现在,我已经拥有了CA1证书(受信任)和收到了客户端证书(非受信任)。在验证期间,我需要仅使用CA1(受信任)来验证客户端证书的信任路径。我没有/收到根证书。
这种验证是否可能?
我正在使用Openssl 1.0.0g版本库。如果有人知道如何做,请与我分享。
我持有由CA1证书签署的客户端证书“A”。CA1证书由根证书签署。
现在,我已经拥有了CA1证书(受信任)和收到了客户端证书(非受信任)。在验证期间,我需要仅使用CA1(受信任)来验证客户端证书的信任路径。我没有/收到根证书。
这种验证是否可能?
我正在使用Openssl 1.0.0g版本库。如果有人知道如何做,请与我分享。
ssl-certificate
,我假设您需要在SSL连接期间进行服务器证书验证或客户端证书验证。X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
的形式被调用。 您还可以从中获取已验证的证书的详细信息 X509_STORE_CTX *
。使用此机制,您可以在代码中实现适当的逻辑,以查看您的最终实体和中间CA证书是否正确,并且如果发现正确,则可以从回调中返回成功,这将表示让OpenSSL继续验证而不会失败。
来自OpenSSL文档的更多详细信息:
当设置了SSL_VERIFY_PEER标志时,verify_callback函数用于控制行为。它必须由应用程序提供,并接收两个参数:preverify_ok指示是否通过了有问题的证书的验证(preverify_ok = 1)或未通过(preverify_ok = 0)。x509_ctx是用于证书链验证的完整上下文的指针。
证书链从最深的嵌套级别(根CA证书)开始检查并向上工作到对等方的证书。在每个级别上,都会检查签名和颁发者属性。每当发现验证错误时,错误号就会存储在x509_ctx中,并使用preverify_ok = 0调用verify_callback。通过应用X509_CTX_store_ *函数,verify_callback可以找到有问题的证书并执行其他步骤(请参见示例)。如果未发现证书错误,则在转到下一级之前使用preverify_ok = 1调用verify_callback。
verify_callback的返回值控制进一步验证过程的策略。如果verify_callback返回0,则立即停止验证过程并出现“验证失败”状态。如果设置了SSL_VERIFY_PEER,则将发送验证失败警报给对等方,并终止TLS / SSL握手。如果verify_callback返回1,则继续验证过程。如果verify_callback始终返回1,则不会因验证失败而终止TLS / SSL握手,并将建立连接。但是,调用进程可以使用SSL_get_verify_result(3)检索最后一个验证错误的错误代码,或通过verify_callback管理自己的错误存储。
如果未指定verify_callback,则将使用默认回调。其返回值与preverify_ok相同,因此如果设置了SSL_VERIFY_PEER,则任何验证失败都将导致TLS / SSL握手终止并显示警报消息。