如何在C/C (OPENSSL)中验证任何类型的证书



我知道如何验证证书

  1. 通过SSL_CTX_load_verify_locations(ctx, caName, caPath)或创建X509_STORE加载CA证书并在其上添加CA证书。
  2. 通过SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL)启用SSL客户端进行同行验证

通过这种方式,我们可以验证已加载的CA证书签名的所有证书。

我想知道的:

1。验证自签名证书

如何通过SSL_CTX_load_verify_locations(ctx, caName, caPath)加载多个CA证书?

如何在上述功能中提供CAPATH?

我尝试过的:

  • 为每个CA证书创建了一个软性ling,其名称由命令openssl X509 -in ca_file.pem -noout -subject_hash
  • 生成。
  • 这些软链接是在名为 ca_path
  • 的同一文件夹中创建的
  • 现在,我将此 ca_path 作为caPath参数。

    我试图使用不同的名称作为 50693e.pem, 50693e.0, 50693e之类的软链接生成哈希,但没有任何效果。

2。验证由众所周知的CA

签署的证书

我需要自己提供CA证书捆绑包以验证甚至签名的证书?

Will openssl库在握手期间从证书服务器响应中获取CA证书链,或者我有 做某事(?

3。如何使SSL客户端验证服务器证书的两种类型(由众所周知的CA签名和签名(?

在SSL握手期间,服务器证书链被验证,从主机证书开始,直到最后一个证书是自签名的证书。例如,考虑主机证书是服务器。

在握手期间,客户端要求服务器证书,服务器发送服务器。客户端使用int.cert验证server.cert,使用ca.cert验证int.cert,并用ca.cert验证ca.cert是其链中的最后证书,并由自己签名无论您是独自生成证书还是从众所周知的CA获得证书,除非您使用ssl_ctx_set_verify_depth

明确指定链的深度,否则它将始终验证整个证书链

要获得证书验证,您需要在客户的客户端设置int.cert和ca.cert。您可以在单个文件(例如Concat int.cert和ca.cert形成ca.pem(中加入多个CA,并使用ssl_ctx_load_verify_locations加载它,在握手期间,验证服务器所需的证书。>

相关内容

最新更新