对于使用受信任CA的服务器验证,用于签署服务器证书的ca-public密钥是否会提供回服务器?

时间:2017-01-04 06:54:13

标签: server openssl self-signed ca

我正在开发一个示例TLS客户端/服务器程序来执行证书验证。

对于自签名证书验证,这些是我遵循的步骤。

@server side:

  1. 生成服务器密钥文件serverkey.key
  2. 从密钥文件生成CSR证书servercert.csr。
  3. 使用a进行数字签名(使用openssl x509实用程序)servercert.csr 生成了rootCA.key和rootCA.cert。服务器证书文件servercert.cert 生成。
  4. 使用加载证书文件(servercert.cert)和密钥文件(serverkey.key) SSL_CTX_use_certificate_fileSSL_CTX_use_PrivateKey openssl apis。
  5. @client side:

    1. 加载服务器ca文件 - > rootCA.cert(手动复制到 客户)使用SSL_CTX_load_verify_locations api。
    2. 使用SSL_get_verify_result()api验证了该服务器的证书 发送证书消息。
    3. 我的问题是,如果我使用受信任的CA(如godaddy)签署服务器CSR证书,CA是否会提供其公钥文件(类似于rootCA.cert),用于签约? 我可以使用SSL_CTX_load_verify_locations api将其加载到客户端的可信列表中。

      我的目的是保持代码不变,无论是自签名证书还是有效的CA提供的证书。

1 个答案:

答案 0 :(得分:1)

当生成(任何)x509证书时,会发生以下情况:

  1. 生成私钥
  2. 公钥(与上述私钥相关联)在新证书中嵌入(成为其中不可或缺的一部分)
  3. 新证书使用发卡行的私钥(读取:CA)
  4. 进行签名

    为了验证证书的完整性(检查是否有人篡改过) - 您需要验证签名(使用颁发者的私钥创建 - 请参阅 3))。为了能够做到这一点,你需要(以某种方式)获得发行者的公钥。此密钥已嵌入发行商的证书(请参阅 2))。通常是受信任的CA'证书存储在所谓的可信证书库中。在OpenSSL的情况下,你指定这个"存储"通过使用SSL_CTX_load_verify_locations函数(以及一些其他类似函数 - 请参阅OpenSSL文档)。

    总结一下: 在您的情况下,SSL_CTX_load_verify_locations 指向的位置应包含您的CA证书 - 所有这些 - 整个证书链直到自签名根证书。您可以从CA获得链中的所有证书(在您的案例中为GoDaddy)。

    我希望有所帮助。 如果我能澄清任何其他内容,请询问。