Server 对于使用受信任CA的服务器验证,是否将用于签署服务器证书的CA公钥提供回服务器?

Server 对于使用受信任CA的服务器验证,是否将用于签署服务器证书的CA公钥提供回服务器?,server,openssl,self-signed,ca,Server,Openssl,Self Signed,Ca,我正在开发一个示例TLS客户机/服务器程序来执行证书验证 对于自签名证书验证,我遵循以下步骤 @服务器端: 已生成服务器密钥文件serverkey.key 从密钥文件生成CSR证书servercert.CSR 数字签名(使用openssl x509实用程序)servercert.csr,使用 生成了rootCA.key和rootCA.cert。服务器证书文件servercert.cert 是生成的 使用加载证书文件(servercert.cert)和密钥文件(serverkey.key) SSL

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

对于自签名证书验证,我遵循以下步骤

@服务器端:

  • 已生成服务器密钥文件serverkey.key
  • 从密钥文件生成CSR证书servercert.CSR
  • 数字签名(使用openssl x509实用程序)servercert.csr,使用 生成了rootCA.key和rootCA.cert。服务器证书文件servercert.cert 是生成的
  • 使用加载证书文件(servercert.cert)和密钥文件(serverkey.key)
    SSL\u-CTX\u-use\u-certificate\u-file
    SSL\u-CTX\u-use\u-PrivateKey
    openssl API
  • @客户端:

  • 已加载服务器ca文件-->rootCA.cert(已手动复制到 客户端)使用
    SSL\u CTX\u load\u verify\u位置
    api
  • 使用
    SSL\u get\u verify\u result
    ()api验证了该服务器的证书 发送证书消息
  • 我的问题是,如果我使用受信任的CA(如godaddy)对服务器CSR证书进行签名,CA是否也会提供其用于签名的公钥文件(类似于rootCA.cert)? 通过它,我可以使用
    SSL\u CTX\u load\u verify\u locations
    api将其加载到客户端的受信任列表中

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

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

  • 生成私钥
  • 公钥(与上述私钥关联)嵌入到新证书中(成为证书不可分割的一部分)
  • 使用颁发者的私钥对新证书进行签名(读:CA)
  • 为了验证证书的完整性(检查是否没有人对其进行篡改)-您需要验证签名(使用颁发者的私钥创建-请参见3))。要做到这一点,您需要(以某种方式)获得发卡机构的公钥。此密钥嵌入到颁发者的证书中(请参见2))。通常,可信CA的证书存储在所谓的可信证书存储中。对于OpenSSL,您可以使用
    SSL\u CTX\u load\u verify\u locations
    函数(以及一些其他类似函数-请参阅OpenSSL文档)指定此“存储”

    总结如下: 在您的情况下,
    SSL\u CTX\u load\u verify\u locations
    所指的位置应包含您的CA的证书-所有证书-整个证书链,直至自签名根证书。您可以从CA(在您的案例中是GoDaddy)获得链中的所有证书

    我希望这有帮助。 如果我能进一步澄清,请询问