我正在开发一个示例TLS客户端/服务器程序来执行证书验证。
对于自签名证书验证,这些是我遵循的步骤。
@server side:
SSL_CTX_use_certificate_file
和SSL_CTX_use_PrivateKey
openssl apis。@client side:
SSL_CTX_load_verify_locations
api。SSL_get_verify_result
()api验证了该服务器的证书
发送证书消息。我的问题是,如果我使用受信任的CA(如godaddy)签署服务器CSR证书,CA是否会提供其公钥文件(类似于rootCA.cert),用于签约?
我可以使用SSL_CTX_load_verify_locations
api将其加载到客户端的可信列表中。
我的目的是保持代码不变,无论是自签名证书还是有效的CA提供的证书。
答案 0 :(得分:1)
当生成(任何)x509证书时,会发生以下情况:
为了验证证书的完整性(检查是否有人篡改过) - 您需要验证签名(使用颁发者的私钥创建 - 请参阅 3))。为了能够做到这一点,你需要(以某种方式)获得发行者的公钥。此密钥已嵌入发行商的证书(请参阅 2))。通常是受信任的CA'证书存储在所谓的可信证书库中。在OpenSSL的情况下,你指定这个"存储"通过使用SSL_CTX_load_verify_locations
函数(以及一些其他类似函数 - 请参阅OpenSSL文档)。
总结一下:
在您的情况下,SSL_CTX_load_verify_locations
指向的位置应包含您的CA证书 - 所有这些 - 整个证书链直到自签名根证书。您可以从CA获得链中的所有证书(在您的案例中为GoDaddy)。
我希望有所帮助。 如果我能澄清任何其他内容,请询问。