在编译时为libcurl定义CA Info

时间:2018-01-24 23:06:46

标签: c++ windows openssl libcurl ca

我已经使用OpenSSL为Windows x64构建了libcurl。如果我使用libcurl命令指定CA Info,如下所示,我可以通过https发布我的数据。

curl_easy_setopt(curl_handle, CURLOPT_CAINFO, "C:\\cacert.pem");

我的问题是关于此处“证书验证”标题下的选项3:https://curl.haxx.se/docs/sslcerts.html

  

3)将服务器的CA证书添加到现有的默认CA证书库。可以使用以下配置选项在编译时更改默认CA证书存储:

     

- with-ca-bundle = FILE:将指定的文件用作CA证书存储区。需要将CA证书以PEM格式连接到此文件中。

     

- with-ca-path = PATH:使用指定的路径作为CA证书存储区。 CA证书需要作为单独的PEM文件存储在此目录中。在那里添加文件后,您可能需要运行c_rehash。

这些设置是仅适用于命令行还是可以在编译时配置libcurl以始终使用相同的CA信息?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

这些设置是仅适用于命令行还是可以在编译时配置libcurl以始终使用相同的CA信息?

cURL具有相同的编译时设置。更准确地说,它们是Autotools选项。

curl-7.57.0$ ./configure --help
`configure' configures curl - to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...
...

  --with-ca-bundle=FILE   Path to a file containing CA certificates (example:
                          /etc/ca-bundle.crt)
  --without-ca-bundle     Don't use a default CA bundle
  --with-ca-path=DIRECTORY
                          Path to a directory containing CA certificates
                          stored individually, with their filenames in a hash
                          format. This option can be used with OpenSSL, GnuTLS
                          and PolarSSL backends. Refer to OpenSSL c_rehash for
                          details. (example: /etc/certificates)
  --without-ca-path       Don't use a default CA path
  --with-ca-fallback      Use the built in CA store of the SSL library
  --without-ca-fallback   Don't use the built in CA store of the SSL library

我有时会在像CentOS 5这样的旧系统上测试cURL。我发现下载更新的cacert.pem最简单,然后使用--with-ca-bundle

如果要使用--with-ca-path,则表示每个证书都经过哈希处理。因此,您将拥有一个包含120或150个文件的目录。这些文件的名称将为NNNNNNNN.0NNNNNNNN.1等。 NNNNNNNN将是一个哈希值,并通过递增后缀来解决冲突。

我保留了我的脚本,用于在Build-Scripts | build-curl.sh在线构建cURL。