【问题标题】:For Server validation using a trusted CA, will the ca-public key that was used to sign the server certificate be provided back to the server?对于使用受信任 CA 的服务器验证,是否会将用于签署服务器证书的 ca-public 密钥提供回服务器?
【发布时间】:2017-01-04 06:54:12
【问题描述】:

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

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

@服务器端:

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

@客户端:

  1. 已加载服务器 ca 文件 --> rootCA.cert(手动复制到 客户端)使用SSL_CTX_load_verify_locations api。
  2. 使用SSL_get_verify_result() api 验证了服务器的证书 发送证书消息。

我的问题是,如果我使用受信任的 CA(如 godaddy)签署服务器 CSR 证书,CA 是否会提供其公钥文件(类似于 rootCA.cert)以及用于签约? 通过它我可以使用SSL_CTX_load_verify_locations api 将其加载到客户端的受信任列表中。

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

【问题讨论】:

    标签: server openssl self-signed ca


    【解决方案1】:

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

    1. 生成私钥
    2. 公钥(与上述私钥相关联)嵌入在新证书中(成为其中不可分割的一部分)
    3. 新证书是使用颁发者的私钥签署的(阅读:CA)

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

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

    我希望这会有所帮助。 如果我能澄清更多,请询问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2013-07-23
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多