web-dev-qa-db-ja.com

localhostおよび "stream_socket_enable_crypto():SSL操作はコード1で失敗しました"

Gmailを使用してメールを送信し、すべてが完全に機能していましたが、突然機能しなくなりました。そしてそれは私にこれを示しています

ErrorException in StreamBuffer.php line 94:

stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed

in StreamBuffer.php line 94
at HandleExceptions->handleError('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', 'C:\xampp\htdocs\coparmex\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php', '94', array())
at stream_socket_enable_crypto(resource, true, '9') in StreamBuffer.php line 94
at Swift_Transport_StreamBuffer->startTLS() in EsmtpTransport.php line 313
at Swift_Transport_EsmtpTransport->_doHeloCommand() in AbstractSmtpTransport.php line 118
at Swift_Transport_AbstractSmtpTransport->start() in Mailer.php line 79
at Swift_Mailer->send(object(Swift_Message), array()) in Mailer.php line 385
at Mailer->sendSwiftMessage(object(Swift_Message)) in Mailer.php line 171

そして、これは私のローカルホストでのみ起こり、ウェブホストはうまく機能します。何が起こっているのか分かりません:c

これらは私のGmail設定です

MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=gmail
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
11
Saucyloco

SSL証明書のエラーです。適切な証明書なしでSSL接続(暗号化された安全な接続)を使用しようとしています。

これは、ローカルホストから接続しているためです。これは安全ではなく、接続によってブロックされます。 localhost接続をSSLベースの接続に変更することで、これを回避できます。

詳細については、 このリンク を参照してください。

9
andreyrk

以下のコードを/config/mail.phpに追加する必要があります(作業はlaravel 5.4)

'stream' => [
'ssl' => [
    'allow_self_signed' => true,
    'verify_peer' => false,
    'verify_peer_name' => false,
],
],

sultan Ahmadが示唆するように、ベンダーのコードを変更しないでください。

編集者注:SSL検証を無効にすると、セキュリティに影響します。SSL/HTTPS接続の信頼性を検証しないと、悪意のある攻撃者は信頼できるエンドポイント(GitHubや他のリモートGitホストなど)になりすますことができ、あなたは 中間者攻撃これを解決策として使用する前に、セキュリティの問題を完全に理解してください。

33
Junaid Masood

同じ問題があり、認証セキュリティのレベルを削除することで解決できました。つまり、ある時点で、Gmailから電話番号(第2レベルの認証)が求められました。この2番目のレベルを削除したとき、私は再び幸せでした。お役に立てば幸いです。

1
Otrebla

こんにちは。サーバーレベルでも非常に便利です。編集\ vendor\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php 259行目$ options = array();をコメントアウトします以下を追加します。

$options = array(); 
$options['ssl'] = array('verify_peer' => false,
'verify_peer_name' => false, 'allow_self_signed' => true);

Laravel 6.0

0