PHP Socket編程 之 fsockopen鏈接https時OpenSSL錯誤


fsockopen()函數鏈接https時提示OpenSSL錯誤, 如下:

  1. fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
  2. error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

OpenSSL Error messages:error:14090086
SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
Failed to enable crypto

此問題和php版本以及openssl相關

一般是openssl根證書的問題

php.ini相關設置
allow_url_fopen = On
allow_url_include = On
openssl.cafile= /www/wdlinux/nginx/conf/cert/cacert.pem  (后來下載OPENSSL證書放上的)

主要是因為php在5.6版本(包含5.6)以后的所有版本中如使用fsockopen() 或file_get_content()函數獲取https站點的信息,OPENSSL會驗證對方站點的SSL證書頒發機構是否可信,如果沒有下載openssl根證書並在php.ini中設置openssl根證書路徑,就會造成無法驗證對方網站SSL證書是否可信,就無法使用上述兩個函數獲取到內容同時生成PHP警告信息,php5.6以前的老版本中此驗證功能是沒有開啟或者說是沒有作用的。所以php5.6以前的版本不存在此問題!

————————————————

環境

OS:Windows
PHP Version:5.6.31

問題

error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
file_get_contents(): Failed to enable crypto

解決方法
從這兒下載 http://curl.haxx.se/ca/cacert.pem 存儲為 cacert.crt
打開 php.ini 找到里面的 curl.cainfo 和 openssl.cafile(2個 section 挨着的)
修改 curl.cainfo=”c:\certs\cacert.crt”
修改 openssl.cafile=”c:\path\certs\cacert.crt”
重啟 IIS 服務(別忘記了)
————————————————https://blog.csdn.net/enlangs/article/details/78988673

*用openssl_get_cert_locations() 函數列出 openssl證書的信息

1. 查看證書信息,隨便寫一個php頁面運行

<?php echo '<pre>';

print_r(openssl_get_cert_locations());

顯示:

Array
(
[default_cert_file] => /apache24/conf/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /apache24/conf/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /apache24/conf/private
[default_default_cert_area] => /apache24/conf
[ini_cafile] =>
[ini_capath] =>
)
第一個default_cert_file根據你自己的位置查找,肯定找不到這個cert.pem文件

2. 下載pem文件

http://curl.haxx.se/docs/caextract.html

到上一部顯示的位置,重命名為  cert.pem

3. 修改php.ini,根據你自己的系統變一下路徑

curl.cainfo = "E:/Program Files/apache24/conf/cert.pem"

openssl.cafile = "E:/Program Files/apache24/conf/cert.pem"

重啟


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM