带有IIS的Windows 10 Pro上的SSL3_GET_SERVER_CERTIFICATE证书验证失败 [英] SSL3_GET_SERVER_CERTIFICATE certificate verify failed on Windows 10 Pro with IIS

查看:413
本文介绍了带有IIS的Windows 10 Pro上的SSL3_GET_SERVER_CERTIFICATE证书验证失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当尝试通过 smtp.google.com 发送电子邮件时rel =nofollow noreferrer在Windows 10上由IIS托管的PHP上的> PHPMailer ,我收到以下错误消息:

When trying to send emails through smtp.google.com via PHPMailer on PHP hosted by IIS on Windows 10, I get this error message:

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

该错误的关键部分我确定证书验证失败。我正在运行OpenSSL,它已启用并链接到我的php。以下是我本地PHP实例输出的一些信息:

The key part of that error I'm sure is certificate verify failed. I'm running OpenSSL and it's enabled and linked to my php. Here is some info output by my local PHP instance:

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.1p 9 Jul 2015
OpenSSL Header Version => OpenSSL 1.0.1p 9 Jul 2015

Directive => Local Value => Master Value
openssl.cafile => no value => no value
openssl.capath => no value => no value

这是我的PHP代码:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';

$mail = new PHPMailer;
$mail->isSMTP(); 
$mail->SMTPDebug = 2; // 0 = off (for production use) - 1 = client messages - 2 = client and server messages
$mail->Host = "smtp.gmail.com"; // use $mail->Host = gethostbyname('smtp.gmail.com'); // if your network does not support SMTP over IPv6
$mail->Port = 587; // TLS only
$mail->SMTPSecure = 'tls'; // ssl is depracated
$mail->SMTPAuth = true;
$mail->Username = $smtpUsername;
$mail->Password = $smtpPassword;
$mail->setFrom($emailFrom, $emailFromName);
$mail->addAddress($emailTo, $emailToName);
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->msgHTML("test body"); //$mail->msgHTML(file_get_contents('contents.html'), __DIR__); //Read an HTML message body from an external file, convert referenced images to embedded,
$mail->AltBody = 'HTML messaging not supported';
// $mail->addAttachment('images/phpmailer_mini.png'); //Attach an image file

if(!$mail->send()){
    echo "Mailer Error: " . $mail->ErrorInfo;
}else{
    echo "Message sent!";
}

我不了解OpenSSL和证书问题。我试图了解 PHPMailer故障排除指南中的更新CA证书部分,但我迷茫和迷茫。有人可以给我一套我可以遵循的步骤并在我的本地Windows 10机器上修复证书问题吗?

I'm out of my depth regarding OpenSSL and cert issues. I have tried to understand the Updating CA certificates section of the PHPMailer troubleshooting guide, but I'm lost and confused. Can someone give me a set of steps I can follow and fix the cert problem on my local Windows 10 machine?

推荐答案

来解释该指南,从curl下载 CA捆绑包并将其存储在文件系统的某个位置。把你保存的路径拿到并在你的php.ini文件中添加一行说:

To paraphrase the guide, download the CA bundle from curl and store it somewhere on your file system. Take the path you saved it to and add a line to your php.ini file saying:

openssl.cafile = $path

其中$ path是保存CA证书的地方。然后重新启动您的Web服务器以获取ini更改。

Where $path is where you saved the CA certs to. Then restart your web server to pick up the ini change.

如果这样可行,您应该在 phpinfo()<的输出中看到该设置/ code>,它还应该给PHP在PHPMailer使用它时验证证书所需的内容。请注意,如果服务器提供真正无效或过期的证书,这将无济于事,但鉴于这是一个众所周知的问题和解决方案,我希望它能够正常工作。

If that worked, you should see that setting in the output from phpinfo(), and it should also give PHP what it needs to validate the certificate when PHPMailer uses it. Be aware that if the server is presenting a truly invalid or expired certificate, this won’t help, but given that this a well-known problem and solution, I expect it to work.

这篇关于带有IIS的Windows 10 Pro上的SSL3_GET_SERVER_CERTIFICATE证书验证失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆