2018年6月12日 星期二

[php] curl OpenSSL: error CURLOPT_SSLVERSION https 錯誤解決

某台機器上使用 php 的 curl 抓取遠端的 zip 檔處理後存下來,
發現檔案卻是空的,經過調查發現,原來是 https 的問題。

使用 wget fetch 原https的uri 出現下面錯誤
OpenSSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

因為是公用機器,然後,uri又是信任的來源,想說直接避過 https
網路上查有幾個方式
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');

不過這些option 沒有用生效
還是出現了
```
* About to connect() to pg-media.ksmobile.com port 443 (#0)
*   Trying 13.33.151.22... * connected
* Connected to  port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -12286
* Closing connection #0
* SSL connect error
```

後來使用了
curl_setopt($ch, CURLOPT_SSLVERSION, 1);

如果要開 curl 的 verbose 可以使用
curl_setopt($ch, CURLOPT_VERBOSE, true);

$fh = fopen("~/test.tmp",'w');
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_URL, "https://www.google.com");
curl_setopt($ch, CURLOPT_FILE, $fh);
curl_exec($ch);
curl_close($ch);
fclose($fh);


沒有留言:

張貼留言