对于使用可信 CA 的服务器验证,用于签署服务器证书的 ca-public 密钥是否会提供回服务器?
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?
我正在开发一个示例 TLS client/server 程序来执行证书验证。
对于自签名证书验证,这些是我遵循的步骤。
@服务器端:
- 生成了服务器密钥文件serverkey.key
- 从密钥文件生成了 CSR 证书servercert.csr。
- 数字签名(使用 openssl x509 实用程序)servercert.csr 使用
生成 rootCA.key 和 rootCA.cert。服务器证书文件 servercert.cert
生成。
- 加载证书文件(servercert.cert)和密钥文件(serverkey.key)使用
SSL_CTX_use_certificate_file
和 SSL_CTX_use_PrivateKey
openssl apis.
@客户端:
- 加载服务器 ca 文件 --> rootCA.cert(手动复制到
客户端)使用
SSL_CTX_load_verify_locations
api.
- 使用
SSL_get_verify_result
() api 验证服务器的证书
发送证书消息。
我的问题是,如果我使用受信任的 CA(如 godaddy)签署服务器 CSR 证书,CA 是否会提供其 public 密钥文件(类似于 rootCA.cert) 以及哪个用于签名?
通过它我可以使用 SSL_CTX_load_verify_locations
api.
将相同的内容加载到客户端的受信任列表
我的意图是保持代码不变,无论是自签名证书还是有效的 CA 提供的证书。
生成(任何)x509 证书时,会发生以下情况:
- 生成私钥
- Public 密钥(与上面提到的私钥相关联)嵌入 在新证书中(成为其中的一个组成部分)
- 新证书使用颁发者的私钥(读取:CA)签署
为了验证证书的完整性(检查是否没有人篡改它)- 您需要验证签名(使用颁发者的私钥创建 - 参见 3))。为了能够做到这一点,您需要(以某种方式)获得发行者的 public 密钥。此密钥 嵌入在颁发者的证书中 (请参阅 2))。通常受信任的 CA 的证书存储在所谓的 受信任的证书库 中。在 OpenSSL 的情况下,您可以使用 SSL_CTX_load_verify_locations
函数(以及其他一些类似的函数 - 请参阅 OpenSSL 文档)来指定此“存储”。
总结一下:
在您的情况下,SSL_CTX_load_verify_locations
指向的位置应该包含您的 CA 证书 - 所有这些 - 整个证书链到自签名根证书。您可以从您的 CA(在您的情况下是 GoDaddy)获取链中的所有证书。
希望对您有所帮助。
如果我能澄清更多,请询问。
我正在开发一个示例 TLS client/server 程序来执行证书验证。
对于自签名证书验证,这些是我遵循的步骤。
@服务器端:
- 生成了服务器密钥文件serverkey.key
- 从密钥文件生成了 CSR 证书servercert.csr。
- 数字签名(使用 openssl x509 实用程序)servercert.csr 使用 生成 rootCA.key 和 rootCA.cert。服务器证书文件 servercert.cert 生成。
- 加载证书文件(servercert.cert)和密钥文件(serverkey.key)使用
SSL_CTX_use_certificate_file
和SSL_CTX_use_PrivateKey
openssl apis.
@客户端:
- 加载服务器 ca 文件 --> rootCA.cert(手动复制到
客户端)使用
SSL_CTX_load_verify_locations
api. - 使用
SSL_get_verify_result
() api 验证服务器的证书 发送证书消息。
我的问题是,如果我使用受信任的 CA(如 godaddy)签署服务器 CSR 证书,CA 是否会提供其 public 密钥文件(类似于 rootCA.cert) 以及哪个用于签名?
通过它我可以使用 SSL_CTX_load_verify_locations
api.
我的意图是保持代码不变,无论是自签名证书还是有效的 CA 提供的证书。
生成(任何)x509 证书时,会发生以下情况:
- 生成私钥
- Public 密钥(与上面提到的私钥相关联)嵌入 在新证书中(成为其中的一个组成部分)
- 新证书使用颁发者的私钥(读取:CA)签署
为了验证证书的完整性(检查是否没有人篡改它)- 您需要验证签名(使用颁发者的私钥创建 - 参见 3))。为了能够做到这一点,您需要(以某种方式)获得发行者的 public 密钥。此密钥 嵌入在颁发者的证书中 (请参阅 2))。通常受信任的 CA 的证书存储在所谓的 受信任的证书库 中。在 OpenSSL 的情况下,您可以使用 SSL_CTX_load_verify_locations
函数(以及其他一些类似的函数 - 请参阅 OpenSSL 文档)来指定此“存储”。
总结一下:
在您的情况下,SSL_CTX_load_verify_locations
指向的位置应该包含您的 CA 证书 - 所有这些 - 整个证书链到自签名根证书。您可以从您的 CA(在您的情况下是 GoDaddy)获取链中的所有证书。
希望对您有所帮助。 如果我能澄清更多,请询问。