2016-06-14 8 views
2

이것은 내 libcurl 코드입니다. 나는 리눅스에서 내 자신의 이메일 도메인에 이메일을 보내려고합니다.libcurl을 사용하여 전자 메일을 보내려는 인증서 문제

이것은 내 샘플 libcurl 코드입니다.

curl_easy_setopt(curl, CURLOPT_USERNAME, "[email protected]"); 
    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); 

이 코드를 실행하면 아래 오류가 발생합니다.

* 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 

답변

3

curl이 출처를 확인할 수 없도록 서버에서 자체 서명 된 인증서를 제공하고 있습니다. 몇 가지 옵션이 있습니다 :

  • 가장 좋은 방법은 잘 알려진 인증 기관이 서명 한 서버 인증서를 얻는 것입니다. 일부 CA는 무료로 사용할 수있는 인증서를 발급합니다. "free ssl certificate"를 검색하십시오. 도메인을 제어한다는 증거를 제공 할 수 있어야합니다.

  • libcurl 코드를 실행하는 컴퓨터의 신뢰할 수있는 CA 목록에 자체 서명 된 인증서를 설치할 수 있습니다. 이 작업을 수행하는 절차는 OS에 따라 다릅니다 (Linux의 다른 배포판에서도 이와 다를 수 있습니다). This link은 Linux의 시작점입니다.

  • 프로그램은 libcurl에게 자체 서명 된 인증서로 확인하도록 알릴 수 있습니다. Adding self-signed SSL certificate for libcurl을 참조하십시오.

  • create your own certificate authority 수 있으며 앞의 두 가지 방법 중 하나를 사용하십시오. 이 자체 서명의 장점은 서명과 서명 된 인증서를 분리한다는 것입니다. 서버 인증서를 변경하려면 (예 : 만료되거나 호스트 이름이 변경되는 경우) 반드시 모든 클라이언트를 다시 구성 할 필요는 없습니다.

  • CURLOPT_SSL_VERIFYPEER을 0으로 설정하여 확인을 비활성화 할 수 있습니다. 그러나 액세스가 불안정 해지므로이 방법을 사용하지 않는 것이 좋습니다. 테스트 목적으로 만 또는 클라이언트와 서버 간의 네트워크가 안전하다는 것이 드문 경우에만 수행해야합니다.