• 新环境c7、php7.4、openssl1.1.1g,再discuz里发送邮件总是报ssl连接不上


    Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
    error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in /www/a.php on line 5
    
    Warning: fsockopen(): Failed to enable crypto in /www/a.php on line 5
    
    Warning: fsockopen(): unable to connect to ssl://smtp.exmail.qq.com:465 (Unknown error) in /www/a.php on line 5
    

      

    以上是测试结果

    找了google和度娘都没有解决,说什么证书问题

    最后看到个修改方法的,临时用一下

    修改 source/function/function_core.php

    注释原来的函数,新增以下方法

    function fsocketopen($hostname, $port = 80, &$errno, &$errstr, $timeout = 15) {
        $fp = '';
        if(function_exists('stream_socket_client')) {
            $contextOptions = array(
    		    'ssl' => array(
    		        'verify_peer' => false,
    		        'verify_peer_name' => false
    		    )
    		);
    		$context = stream_context_create($contextOptions);
    		$fp = @stream_socket_client($hostname.':'.$port, $errno, $errstr, $timeout,STREAM_CLIENT_CONNECT, $context);
    	}
        return $fp;
    }

    测试后可以正常放邮件,就是以后dz升级要注意下这块或者重新编译系统环境。

    原文提示

    一个php系统很早的了,后来把环境升级换成https与php5.6以后发现通信api不工作,通过排查发现是fsockopen函数的问题:
    
    报错:Warning:  fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate
    
    
    
    解决方法法改造一下fsockopen方法:
    
    //不验证证书
    
    $contextOptions = array(
    
        'ssl' => array(
    
            'verify_peer' => false,
    
            'verify_peer_name' => false
    
        )
    
    );
    
    //如果有签名的证书
    
    /*
    
    $contextOptions = array(
    
        'ssl' => array(
    
            'verify_peer' => true, 
    
            'cafile' => '/path/to/cacert.pem',
    
            //'CN_match' => 'xcwmoon.net', // 匹配域名
    
            'ciphers' => 'HIGH:!SSLv2:!SSLv3',
    
            'disable_compression' => true,
    
        )
    
    );
    
    */
    
    $context = stream_context_create($contextOptions);
    
    $fp = stream_socket_client("ssl://{$host}:{$port}", $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $context);
    

      来源:https://www.xcwmoon.com/post/88

  • 相关阅读:
    Solr学习笔记(2) —— Solr管理索引库
    Solr学习笔记(1) —— Solr概述&Solr的安装
    Linux软件安装
    Redis学习笔记(5)—— Redis的持久化方案&Redis的集群搭建
    Redis学习笔记(3)—— 五种数据类型&keys的通用操作
    Redis学习笔记(4)—— Jedis入门
    Redis学习笔记(2)—— Redis的安装和使用
    Redis学习笔记(1)—— NoSQL&Redis简介
    FastDFS
    Nginx
  • 原文地址:https://www.cnblogs.com/coolid/p/13099053.html
Copyright © 2020-2023  润新知