首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用libcurl发送电子邮件时出现证书问题

尝试使用libcurl发送电子邮件时出现证书问题
EN

Stack Overflow用户
提问于 2016-06-14 22:15:32
回答 1查看 600关注 0票数 2

这是我的libcurl代码。我正在尝试在linux中向我自己的电子邮件域发送电子邮件。

这是我的样例libcurl代码。

代码语言:javascript
复制
curl_easy_setopt(curl, CURLOPT_USERNAME, "username@mydomain.com");
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "mypassword");
    curl_easy_setopt(curl, CURLOPT_URL, "smtp://mail.mydomain.com:25");
    curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
    curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM);
    recipients = curl_slist_append(recipients, TO);
    curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
    curl_easy_setopt(curl, CURLOPT_INFILESIZE, file_size);
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, fileBuf_source);
    curl_easy_setopt(curl, CURLOPT_READDATA, &file_upload_ctx);
    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); //Dont display Curl Connection data Change 1L to 0

    res = curl_easy_perform(curl);

当我运行这段代码时,我得到了下面的错误。

代码语言:javascript
复制
* Rebuilt URL to: smtp://mail.mydomain.com:25/
* Hostname was NOT found in DNS cache
*   Trying <My mail domain Ip address>...
* Connected to mail.mydomain.com (<My mail domain Ip address>) port 25 (#0)
< 220 mail.mydomain.com ESMTP
> EHLO client6
< 250-mail.mydomain.com
< 250-PIPELINING
< 250-SIZE 20480000
< 250-VRFY
< 250-ETRN
< 250-STARTTLS
< 250-AUTH PLAIN LOGIN
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 DSN
> STARTTLS
< 220 2.0.0 Ready to start TLS
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSL certificate problem: self signed certificate
* Closing connection 0
curl_easy_perform() failed: Peer certificate cannot be authenticated with given CA certificates
EN

回答 1

Stack Overflow用户

发布于 2016-06-19 03:41:33

您的问题是您的服务器提供了一个自签名证书,因此curl无法验证它的出处。您有几个选项:

  • 最佳选择是获取由知名证书颁发机构签名的服务器证书。某些CA会颁发可免费使用的证书;请搜索“免费ssl证书”。您需要能够提供一些证明您控制该域。
  • 您可以将自签名证书安装到运行libcurl代码的计算机上的受信任CA列表中。执行此操作的过程取决于您的操作系统(即使是不同的Linux发行版也可能以不同的方式执行此操作)。对于Linux来说,libcurl是一个不错的起点。
  • 你的程序可以告诉libcurl使用自签名证书进行验证。请参见Adding self-signed SSL certificate for libcurl.
  • You can create your own certificate authority并使用前两种方法中的任何一种。与自签名相比,这种方式的优点是它将签名和签名证书解耦。如果你想更改服务器证书(例如,如果证书过期或主机名更改),你不一定需要重新配置所有客户端。
  • 为了完整性,你可以通过将CURLOPT_SSL_VERIFYPEER设置为0来禁用验证。然而,这是非常不鼓励的,因为它使访问不安全。您只应出于测试目的,或在极少数情况下保证客户端和服务器之间的网络是安全的情况下才执行此操作。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37814590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档