2014-07-07 6 views
22

मैं अपने (लोकलहोस्ट) विंडोज 8 मशीन से चल रहे अमेज़ॅन की एस 3 फाइलों को कनेक्ट करने की कोशिश कर रहा हूं AppServ 2.5.10 जिसमें शामिल है PHP के लिए अमेज़ॅन एसडीके का उपयोग करके अपाचे 2.2.8, PHP 5.2.6, mysql 5.0.51b और phpMyAdmin 2.10.3)। अमेज़ॅन एसडीके की नेमस्पेस फीचर के साथ संगत होने के लिए, मैंने पीपीपी को संस्करण 5.3.28 के साथ पर अपनी ज़िप फ़ाइल डाउनलोड करने और इसे अनजिप कर दिया।एडब्ल्यूएस एसएसएल सुरक्षा त्रुटि: [कर्ल] 60: एसएसएल प्रमाणपत्र जांच ... स्थानीय जारीकर्ता प्रमाण पत्र प्राप्त करने में असमर्थ

मेरा PHP कोड अमेज़ॅन ईसी 2 में एस 3 फ़ाइल तक पहुंचने के लिए ठीक काम करता है लेकिन यह मेरे विंडोज़ स्थानीय होस्ट में विफल रहा है।

गंभीर त्रुटि:: न आया हुआ अपवाद 'guzzle \ http \ अपवाद \ CurlException' संदेश के साथ '[कर्ल हालांकि जब मैं php srcipt चलाने के लिए Windows स्थानीय होस्ट मशीन में अमेज़न S3 बाल्टी फ़ाइल को पढ़ने के लिए, मैं SSL त्रुटि निम्नलिखित के रूप में मिला ] 60: एसएसएल प्रमाणपत्र समस्या: स्थानीय जारीकर्ता प्रमाण पत्र प्राप्त करने में असमर्थ [यूआरएल] https://images-st.s3.amazonaws.com/us/123977_sale_red_car.png 'सी में: \ AppServ \ www \ ecity \ विक्रेता \ guzzle \ guzzle \ src \ Guzzle \ Http \ Curl \ CurlMulti.php: 342 स्टैक ट्रेस: # 0 सी: \ AppServ \ www \ ecity \ विक्रेता \ guzzle \ guzzle \ src \ Guzzle \ Http \ Curl \ CurlMulti.php (283): Guzzle \ Http \ Curl \ CurlMulti-> isCurlException (ऑब्जेक्ट (Guzzle \ Http \ message \ अनुरोध), ऑब्जेक्ट (Guzzle \ Http \ Curl \ CurlHandle), ऐरे) # 1 सी: \ AppServ \ www \ ecity \ विक्रेता \ guzzle \ guzzle \ src \ Guzzle \ Http \ Curl \ CurlMulti.php (248): Guzzle \ Http \ Curl \ CurlMulti-> प्रक्रिया प्रतिक्रिया (ऑब्जेक्ट (Guzzle \ Http \ संदेश \ अनुरोध), ऑब्जेक्ट (Guzzle \ Http \ Curl \ CurlHandle), ऐरे) # 2 सी: \ ऐप सेवा \ www \ ecity \ विक्रेता \ guzzle \ guzzle \ src \ Guzzle \ Http \ Curl \ CurlMulti.php (231): Guzzle \ Http \ Curl \ CurlMulti-> प्रक्रिया संदेश() # 3 सी: \ AppServ \ www \ ecity \ विक्रेता \ guzzle \ guzzle \ src \ Guzzle \ Http \ Curl \ CurlMulti.php (215): Guzzle \ Http \ Curl \ CurlMulti-> executeHandles() # 4 C: \ AppServ \ www \ ecity \ ven C: \ AppServ में \ www \ ecity \ विक्रेता \ एडब्ल्यूएस \ एडब्ल्यूएस-sdk-php \ src \ Aws \ Common \ क्लाइंट \ AbstractClient.php 288

मैं निम्नलिखित के रूप में http://curl.haxx.se/ca/cacert.pem से certifate डाउनलोड करने और php.ini में परिभाषित लाइन पर: curl.cainfo = "सी: \ AppServ \ cacert.pem" लेकिन मुझे अभी भी वही त्रुटि मिली है। ऐसा लगता है कि php php.ini में परिभाषित curl.cainfo का सम्मान नहीं करता है।

मेरा PHP संस्करण 5.3.28 स्थानीयहोस्ट/phpinfo.php पर accourding है। मैंने cainfo पैरामीटर को भी C: \ AppServ \ cacert.pem के रूप में सही करने के लिए echo ini_get ("curl.cainfo") का उपयोग करके सही किया है; Php स्क्रिप्ट में । 5.3 से अधिक PHP संस्करण php.ini में curl.cainfo का समर्थन करेगा।

विंडोज़ कमांड लाइन में, मैं कर्ल व्यवहार की जांच करता हूं और यह ठीक काम करता है।

C:\Users\Jordan>curl https://s3-us-west-2.amazonaws.com/images-st/aaa.txt 
    curl: (60) SSL certificate problem: unable to get local issuer certificate 
    ...... 

C:\Users\Jordan>curl --cacert C:\AppServ\cacert.crt https://s3-us-west-2.amazonaws.com/images-st/aaa.txt 
    This is aaa.txt file. 
    Stored in Amazon S3 bucket. 

यह क्योंकि क्योंकि मैं Windows में अपाचे का इस्तेमाल किया जो php 5.3.28 ज़िप फ़ाइल से मेल नहीं खाता मैं थ्रेड सुरक्षित (2014-जून -11 01:09:56) जिप संस्करण http://windows.php.net/download/ VC9 86 से डाउनलोड किया है।

मेरी अपाचे के httpd-ssl.conf फ़ाइल में, मैं भी स्थापित करने निम्नलिखित है मैं Windows में स्थानीय मेजबान से उपयोग करें 8.

<VirtualHost _default_:443> 

DocumentRoot "C:/AppServ/www" 
ServerName localhost:443 
ServerAdmin [email protected] 
ErrorLog "C:/AppServ/Apache2.2/logs/error.log" 
TransferLog "C:/AppServ/Apache2.2/logs/access.log" 

SSLEngine on 

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL 
SSLCertificateFile "C:/AppServ/Apache2.2/conf/mydomain.cert" 
SSLCertificateKeyFile "C:/AppServ/Apache2.2/conf/mydomain.key" 

<FilesMatch "\.(cgi|shtml|phtml|php)$"> 
    SSLOptions +StdEnvVars 
</FilesMatch> 
<Directory "C:/Apache2.2/cgi-bin"> 
    SSLOptions +StdEnvVars 
</Directory> 

BrowserMatch ".*MSIE.*" \ 
    nokeepalive ssl-unclean-shutdown \ 
    downgrade-1.0 force-response-1.0 

CustomLog "C:/AppServ/Apache2.2/logs/ssl_request.log" \ 
     "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 

</VirtualHost>         

अब मैं सोच रहा हूँ कि समस्या क्या है और कैसे अमेज़न से कनेक्ट करने के के बिना एस 3 बाल्टी फाइलें और आरडीएस डेटाबेस इन कर्ल का उत्पादन करने से मेरे विंडोज 8 स्थानीय होस्ट से स्थानीय जारीकर्ता प्रमाण पत्र समस्याएं नहीं मिल सकती हैं। कोई सलाह?

$aws = Aws\Common\Aws::factory(array(
    'region' => 'us-west-2', 
    'ssl.certificate_authority' => '/path/to/updated/cacert.pem' 
)); 

http://docs.aws.amazon.com/aws-sdk-php/guide/latest/faq.html#what-do-i-do-about-a-curl-ssl-certificate-error


मैं:

+4

आप की कोशिश की ([ 'ssl.certificate_authority' विकल्प सेट] है http://docs.aws.amazon.com/aws-sdk -एचपी/गाइड/नवीनतम/faq.html # क्या-do-i-do-about-a-curl-ssl-प्रमाणपत्र-त्रुटि) जब आप एसडीके को तुरंत चालू करते हैं? –

+0

धन्यवाद! जेरेमी। आप एडब्ल्यूएस विशेषज्ञ ने तुरंत समस्या को पकड़ लिया। – user2818066

+0

कोई समस्या नहीं! :-) –

उत्तर

26

टिप्पणी में Jeremy Lindblom से उल्लेख किया है, एडब्ल्यूएस SDK v2 के लिए समाधान जब एसडीके instantiating ssl.certificate_authority विकल्प सेट करने के लिए है जोड़ देंगे कि यह एडब्ल्यूएस एसडीके v3 में बदल दिया गया था, यहां नया है विधि:

$client = new DynamoDbClient([ 
    'region' => 'us-west-2', 
    'version' => 'latest', 
    'http' => [ 
     'verify' => '/path/to/my/cert.pem' 
    ] 
]); 

http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html#verify

+8

परीक्षण के उद्देश्य के लिए भी आप गलत को सत्यापित कर सकते हैं। '$ ग्राहक = नए DynamoDbClient ([ 'क्षेत्र' => 'हमें पश्चिम -2', 'संस्करण' => 'नवीनतम', 'http' => [ 'की पुष्टि' => झूठी ] ]); ' –

5

मैं एक ही त्रुटि हो रही थी आप http उपयोग करने के लिए तो आप समाधान नीचे का उपयोग कर सकते हैं:

Error executing "PutObject" on "https://s3-ap-southeast-2.amazonaws.com/mybucketname/TestBanner1_e1d8d74e41"; AWS HTTP error: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) 

मैं इसे http पद्धति का उपयोग करके यह है के द्वारा हल किया है सुरक्षित तरीके से उपयोग करने के लिए सुरक्षित नहीं है _ curl.cainfo = "/path/to/file.cacert.pem"_ php.ini फ़ाइल में:

समाधान:

'options' => [ 
'scheme' => 'http', 
], 

संपूर्ण उदाहरण कोड:

// ... 
's3bucket' => [ 
'class' => \frostealth\yii2\aws\s3\Storage::className(), 
'region' => 'ap-southeast-2', 
'credentials' => [ // Aws\Credentials\CredentialsInterface|array|callable 
'key' => 'JGUTEHCDE.............OSHS', 
'secret' => 'SJEUC-----------jzy1-----rrT', 
], 
'bucket' => 'yours3bucket', 
//'cdnHostname' => 'http://example.cloudfront.net', 
'defaultAcl' => \frostealth\yii2\aws\s3\Storage::ACL_PUBLIC_READ, 
'debug' => false, // bool|array 
'options' => [ 
'scheme' => 'http', 
], 

], 
// ... 
+1

यह काम करता है लेकिन यह उल्लेख करने के लिए बस एसएसएल को 'सत्यापन = झूठी' के माध्यम से अक्षम करने जैसा ही है। –

+0

हाँ यदि आप http का उपयोग करना चाहते हैं तो आप केवल परीक्षण के लिए उपयोग कर सकते हैं। –

संबंधित मुद्दे

 संबंधित मुद्दे