ProgramingTip

osx 10.10 HTTPS URL에 대한 Curl POST에서 SSLRead () 오류 발생

bestdevel 2020. 10. 26. 08:25
반응형

osx 10.10 HTTPS URL에 대한 Curl POST에서 SSLRead () 오류 발생


최근에 OSX 10.10 Yosemite로 업그레이드 된 이후로 더 이상 SSL URL에 Curl POST를 수행 할 수 없습니다.

나는 먼저 wordpress의 wp_remote_request호출을 사용하고 PHP에서 curl을 사용하려고했습니다. 둘 다 (예상대로) 동일한 오류 메시지가 제공됩니다.

오류 번호 : 56

오류 패키지 : SSLRead () 오류 반환 -9806

참고 : POST를 HTTP로 컬하면 작동합니다. 나는 그것이 PHP.ini 또는 내 아파치의 설정이라고 생각합니다 (업그레이드 후 원래 HTTPD.conf 파일을 잃었습니다 ...).

누구든지 나를 도울 수 있습니까?


이 오류는 php가 Yosemite에서 Apple의 Secure Transport 를 사용하는 cURL 버전으로 선택되고 URL 요청 대상이 SSLv3 ( POODLE 취약성으로 인해 발생할 수 있음)을 지원하지 않을 때 발생하는 것을 보았습니다 . 이 명령의 출력은 무엇입니까?

$ php -i | grep "SSL Version"

나는 당신이 볼 생각합니다.

SSL Version => SecureTransport

SecureTransport 대신 OpenSSL을 사용하는 cURL 버전을 사용하는 PHP 버전을 설치하여 사용할 수 있습니다. homebrew로 가장 쉽게 할 수 있습니다 . 아직 설치하지 않은 경우 먼저 설치하십시오. homebrew가 설치되어있는 경우 brew updateYosemite로 업그레이드 한 후 실행 하지 않을 경우 먼저 수행하십시오. 또한 XCode> = 6.1 및 최신 XCode 명령 줄 도구를 설치했는지 확인하십시오. brew doctor잘 알려줄 것입니다.

Brewed PHP를 설치하기 위해 필요한 Homebrew 탭을 아래에 추가하십시오. 저장소가 이미있는 경우이 단계를 건너 탭니다. 확실하지 않은 경우 다음 명령을 실행하십시오. 최악의 시나리오, 당신은 무해하게 될 것입니다Warning: Already tapped!

$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/php

그런 다음 openssl로 curl을 설치하십시오.

$ brew install --with-openssl curl

그런 다음 설치하고 양조 한 openssl을 사용하여 PHP를 설치합니다.

$ brew install --with-homebrew-curl --with-httpd24 php55
  • 아파치를 사용하는 경우 아파치를 추가 하고 다시 시작 LoadModule php5_module /usr/local/opt/php55/libexec/apache2/libphp5.so하십시오 /etc/apache2/httpd.conf.

  • Apache 2.4를 사용하지 않는 경우 --with-httpd24위 명령에서 제거 할 수 있습니다 .

  • nginx를 사용하는 경우 fpm 시작에 대한주의 사항을 살펴보십시오.

    시작시 php-fpm을 시작 비용 :

    mkdir -p ~/Library/LaunchAgents
    cp /usr/local/opt/php55/homebrew.mxcl.php55.plist ~/Library/LaunchAgents/
    launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist
    

예를 들어 필요한 PHP 확장을 설치하십시오. mcrypt.

$ brew install php55-mcrypt

완료되면 다음을 다시 실행하십시오.

$ php -i | grep "SSL Version"

그리고 다음을 볼 수 있습니다.

SSL Version => OpenSSL/1.0.2h

이제 응용 프로그램을 다시 테스트하면 SSLRead() return error -9806사라집니다.


이 SSL 오류 (OSStatus 코드 : 9806)는 연결 설정 오류 (예 : 잘못된 명령)로 인해 서버에서 연결을 종료했음을 의미합니다. 이 원격 호스트에 대한 SSL 연결이 그 사이에 더러워지는 경우에만 발생하는 것입니다.

SSL 매뉴얼 ( )에 잘 문서화되어 있지 않지만 오류 메시지는 SecureTransport / Darwinssl TLS 백엔드에서 사용되는 빌드 에서 발생합니다 ( 헤더 파일 에서 OSStatus를 수 있음 ).SSL_get_errorlibcurlSecureTransport.h

errSSLClosedAbort           = -9806,    /* connection closed via error */

내 경험상, 일반적으로 프록시 사용하는 경우 인증을 사용하는 네트워크에 연결되어있을 수 있습니다.

따라서 올바른 네트워크 (WiFi를 통해)에 연결되어 있고 HTTPS가 작동하는지 확인하십시오. 프록시 자격 증명을 지정해야하는 경우 또는 ISP가 인증서 체인을 무시하고 다음 인증이 또는 기본적으로 방화벽의 특정 사이트에 대한 액세스를 차단하는지 확인합니다.


나는 SSLRead() return error -9806오류 와 문제가 있지만 SSL Version => SecureTransport.

그러나 제 경우에는 컬 CURLOPT_HTTP_VERSION옵션 을 설정하는 것이 문제였습니다 .

$curl = curl_init();    
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);

해당 옵션을 제거하면 cURL이 기본적으로 사용할 버전을 결정합니다. 자세한 내용은 curl_setopt 문서를 확인하십시오 .

그것은 나를 위해 일 필요 cURL이나 PHP로 아무것도 설명가 없습니다. 그러나 이것은 error -9806많은 경우 중 하나의 해결책입니다 .

참고 URL : https://stackoverflow.com/questions/26461966/osx-10-10-curl-post-to-https-url-gives-sslread-error

반응형