我知道如何验证证书
- 通过
SSL_CTX_load_verify_locations(ctx, caName, caPath)
或创建X509_STORE
加载CA证书并在其上添加CA证书。 - 通过
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加载它,在握手期间,验证服务器所需的证书。>