Python

不带 CA

  • 如果您不想在 Python 的 requests 库中使用 CA 证书进行验证,可以按照以下方式更改 Python 代码:
    1. 如果您不想在 Python requests 库中使用 CA 证书进行验证,可以按照以下方式更改 Python 代码:
    ```python import requests

url = ‘https://examples.com/login‘ cert = (‘client.crt’, ‘client.key’) data = {‘username’: ‘user’, ‘password’: ‘pass’}

response = requests.post(url, cert=cert, data=data, verify=False)

  1. :::tips
  2. - 在这个例子中,我们将 verify 参数设置为 False,以禁用 SSL 证书验证。这将允许您忽略 SSL 证书验证错误。但是,在生产环境中,您应该使用有效的证书,并确保您的代码验证了服务器 SSL 证书。
  3. - 请注意,禁用 SSL 证书验证可能会使您的应用程序容易受到中间人攻击。因此,建议您在生产环境中使用受信任的证书机构颁发的 SSL 证书,并启用 SSL 证书验证。
  4. :::
  5. <a name="MxD7i"></a>
  6. ## 带 CA
  7. ```python
  8. import requests
  9. url = 'https://examples.com/login'
  10. cert = ('client.crt', 'client.key')
  11. data = {'username': 'user', 'password': 'pass'}
  12. ca_cert = 'ca.pem'
  13. response = requests.post(url, cert=cert, data=data, verify=ca_cert)

:::tips

  • 在这个例子中,我们添加了一个 verify 参数,它接受一个 CA 证书的路径,用于验证服务器证书。指定 CA 证书的路径将启用 SSL 证书验证。请注意,CA 证书应该是受信任的证书机构颁发的证书。
  • 如果您的 CA 证书不是受信任的证书机构颁发的证书,那么您可能需要使用 verify 参数的另一种选项。您可以将 verify 参数设置为 True,以使用操作系统的默认 CA 证书存储库进行验证,或将其设置为 CA 证书存储库的路径。例如: :::
    1. response = requests.post(url, cert=cert, data=data, verify=True)
    1. response = requests.post(url, cert=cert, data=data, verify=True)
    :::tips 在这些示例中,verify 参数使用操作系统的默认 CA 证书存储库或指定的 CA 证书存储库路径进行验证。 :::

PHP

不带 CA

在 PHP 中,您可以使用 curl_setopt 函数设置证书文件和密钥,然后使用 curl_exec 函数执行请求。下面是一个示例代码片段:

  1. $url = 'https://examples.com/login';
  2. $cert = 'client.crt';
  3. $key = 'client.key';
  4. $data = array('username' => 'user', 'password' => 'pass');
  5. $ch = curl_init();
  6. curl_setopt($ch, CURLOPT_URL, $url);
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  8. curl_setopt($ch, CURLOPT_POST, true);
  9. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  10. curl_setopt($ch, CURLOPT_SSLCERT, $cert);
  11. curl_setopt($ch, CURLOPT_SSLKEY, $key);
  12. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  13. $response = curl_exec($ch);
  14. curl_close($ch);

:::tips 在这个例子中,我假设 client.crt 和 client.key 文件与脚本位于同一目录中。如果它们在其他位置,您可以使用完整路径指定文件路径。
curl_setopt 函数是用来设置 cURL 选项的。在这个示例中,我们设置了以下选项:

  • CURLOPT_URL:设置请求的 URL。
  • CURLOPT_RETURNTRANSFER:将 cURL 的返回值作为字符串而不是直接输出到屏幕。
  • CURLOPT_POST:设置请求方法为 POST。
  • CURLOPT_POSTFIELDS:设置请求体内容为数据数组。
  • CURLOPT_SSLCERT:设置客户端证书文件路径。
  • CURLOPT_SSLKEY:设置客户端私钥文件路径。
  • CURLOPT_SSL_VERIFYPEER:设置是否验证服务器 SSL 证书。

请注意,最后一个选项 CURLOPT_SSL_VERIFYPEER 被设置为 false,以允许 cURL 忽略 SSL 证书验证错误。这仅在调试期间建议使用。在生产环境中,您应该使用有效的证书,并确保您的代码验证了服务器 SSL 证书。 :::

带 CA

  • 如果您要在 PHP 的 cURL 请求中使用客户端证书以及 CA 证书,您可以使用以下示例代码: ```python $url = ‘https://examples.com/login‘; $cert = ‘client.crt’; $key = ‘client.key’; $ca_cert = ‘ca.pem’;

$data = array(‘username’ => ‘user’, ‘password’ => ‘pass’);

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_SSLCERT, $cert); curl_setopt($ch, CURLOPT_SSLKEY, $key); curl_setopt($ch, CURLOPT_CAINFO, $ca_cert); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

$response = curl_exec($ch); curl_close($ch);

``` :::tips 在这个例子中,我们添加了 CURLOPT_CAINFO 选项,它指定了 CA 证书的路径,用于验证服务器证书。我们还将 CURLOPT_SSL_VERIFYPEER 设置为 true,以确保验证服务器 SSL 证书,并将 CURLOPT_SSL_VERIFYHOST 设置为 2,以确保验证服务器的主机名。
请注意,CA 证书应该是受信任的证书机构颁发的证书。如果您的 CA 证书不是受信任的证书机构颁发的证书,那么您可能需要使用 CURLOPT_CAPATH 选项来指定证书路径,而不是使用 CURLOPT_CAINFO。 :::