39 amazon-ec2 ssl-certificate laravel-4 apache2.4 php-5.6
stream_socket_enable_crypto(): SSL operation failed with code 1.
OpenSSL Error messages: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Run Code Online (Sandbox Code Playgroud)
我使用的是Laravel 4.2,PHP 5.6,Apache 2.4
我在Amazon ec2 Linux中安装了GoDaddy SSL.
当我使用https访问该网站时,SSL工作正常.
我调用我的函数时发生错误:
<?php
public function sendEmail()
{
\Mail::send ( 'emails.code.code', $data, function ($sendemail) use($email) {
$sendemail->from ( 'info@me.com', 'Me Team' );
$sendemail->to ( $email, '' )->subject ( 'Activate your account' );
} );
}
?>
Run Code Online (Sandbox Code Playgroud)
我读了一些关于这个的文章,他们说有些东西我们应该做一些改变,他们把那些代码但是我不知道在哪里插入它.
读过这篇文章:https://www.mimar.rs/en/sysadmin/2015/php-5-6-x-ssltls-peer-certificates-and-hostnames-verified-by-default/
和http://php.net/manual/en/migration56.openssl.php这个文档很难理解.
所以我的问题是如何解决这个问题?
小智 106
您应该在/config/mail.php中添加以下代码(在laravel 5.1,5.2,5.4上测试并使用)
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
],
Run Code Online (Sandbox Code Playgroud)
编者注:禁用SSL验证具有安全隐患.如果不验证SSL/HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到中间人攻击.在将此作为解决方案之前,请确保完全了解安全问题.
Hum*_*yan 30
我在laravel 4.2中也有这个错误,我这样解决了.找出答案StreamBuffer.php.对我来说,我使用xampp,我的项目名称是itis_db,因为我的路径是这样的.所以试着根据你的那个找到
C:\ XAMPP\htdocs中\ itis_db \供应商\ swiftmailer\swiftmailer\LIB \类\雨燕\传输\ StreamBuffer.php
并在StreamBuffer.php中找到此函数
private function _establishSocketConnection()
Run Code Online (Sandbox Code Playgroud)
并将此两行粘贴到此函数内
$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;
Run Code Online (Sandbox Code Playgroud)
编者注:禁用SSL验证具有安全隐患.如果不验证SSL/HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到中间人攻击.在将此作为解决方案之前,请确保完全了解安全问题.
并重新加载您的浏览器并尝试再次运行您的项目.对我来说,我穿上这样:
private function _establishSocketConnection()
{
$host = $this->_params['host'];
if (!empty($this->_params['protocol'])) {
$host = $this->_params['protocol'].'://'.$host;
}
$timeout = 15;
if (!empty($this->_params['timeout'])) {
$timeout = $this->_params['timeout'];
}
$options = array();
if (!empty($this->_params['sourceIp'])) {
$options['socket']['bindto'] = $this->_params['sourceIp'].':0';
}
$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
if (false === $this->_stream) {
throw new Swift_TransportException(
'Connection could not be established with host '.$this->_params['host'].
' ['.$errstr.' #'.$errno.']'
);
}
if (!empty($this->_params['blocking'])) {
stream_set_blocking($this->_stream, 1);
} else {
stream_set_blocking($this->_stream, 0);
}
stream_set_timeout($this->_stream, $timeout);
$this->_in = &$this->_stream;
$this->_out = &$this->_stream;
}
Run Code Online (Sandbox Code Playgroud)
希望你能解决这个问题.....
小智 18
尝试改变 app/config/email.php
smtp 至 mail
如何修复 Laravel 7 或 Laravel 6(未在其他版本上测试,但应该可以工作):
从cURL 网站下载最新的cacert.pem文件。
wget https://curl.haxx.se/ca/cacert.pem
Run Code Online (Sandbox Code Playgroud)
编辑 php.ini(您可以php --ini找到它),更新(如果它们不存在,则创建)这两行:
curl.cainfo="/path/to/downloaded/cacert.pem"
...
openssl.cafile="/path/to/downloaded/cacert.pem"
Run Code Online (Sandbox Code Playgroud)
这些行应该已经存在但已注释掉,因此取消注释它们并使用下载的路径编辑这两个值 cacert.pem
重启 PHP 和 Nginx/Apache。
编辑:您可能需要 chown/chmod 下载的证书文件,以便 PHP(及其用户)可以读取它。
小智 8
对此进行简单修复可能是编辑config/mail.php并关闭TLS
'encryption' => env('MAIL_ENCRYPTION', ''), //'tls'),
Run Code Online (Sandbox Code Playgroud)
基本上这样做
$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;
Run Code Online (Sandbox Code Playgroud)
您也应该放松安全性,但在第一个选项中,无需深入了解供应商的代码.
编者注:正如作者所说:禁用SSL验证具有安全隐患.如果不验证SSL/HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到中间人攻击.在将此作为解决方案之前,请确保完全了解安全问题.
最后!这是我的 AVG 防病毒软件,它有一个名为“电子邮件防护”的功能,禁用它后错误就消失了。
对于 Laravel 9,以下内容足以禁用 ssl 检查:
'verify_peer' => false,
Run Code Online (Sandbox Code Playgroud)
示例:
// config/mail.php
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'auth_mode' => null,
'verify_peer' => false,
],
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101528 次 |
| 最近记录: |