come correggere stream_socket_enable_crypto (): operazione SSL fallita con il codice 1

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

Sto usando Laravel 4.2, PHP 5.6, Apache 2.4

Ho installato GoDaddy SSL su Amazon ec2 Linux.

SSL funziona bene quando visito il sito con https.

L’errore si è verificato quando chiamo la mia funzione:

 from ( '[email protected]', 'Me Team' ); $sendemail->to ( $email, '' )->subject ( 'Activate your account' ); } ); } ?> 

Ho letto alcuni articoli su questo, hanno detto che ci sono cose che dovremmo apportare delle modifiche, hanno messo quel codice ma non so dove inserirlo.

Ho letto questo: https://www.mimar.rs/en/sysadmin/2015/php-5-6-x-ssltls-peer-certificates-and-hostnames-verified-by-default/

e questa documentazione di php http://php.net/manual/en/migration56.openssl.php che è difficile da capire.

Quindi la mia domanda è come risolvere questo problema?

Dovresti aggiungere sotto il codice in /config/mail.php (testato e funzionante su laravel 5.1, 5.2, 5.4)

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

Nota del redattore : la disabilitazione della verifica SSL ha implicazioni sulla sicurezza. Senza la verifica dell’autenticità delle connessioni SSL / HTTPS, un malintenzionato può impersonare un endpoint fidato (come GitHub o qualche altro host Git remoto) e sarai vulnerabile a un attacco Man-in-the-Middle . Assicurati di comprendere appieno i problemi di sicurezza prima di utilizzare questo come soluzione.

Ho anche questo errore in laravel 4.2 che ho risolto in questo modo. Scopri StreamBuffer.php . Per me io uso xampp e il mio nome progetto è itis_db per questo il mio percorso è come questo. Quindi prova a trovare secondo il tuo

C: \ xampp \ htdocs \ itis_db \ ​​vendor \ swiftmailer \ Swiftmailer \ lib \ Classes \ Swift \ Transport \ StreamBuffer.php

e scopri questa funzione all’interno di StreamBuffer.php

 private function _establishSocketConnection() 

e incolla queste due righe all’interno di questa funzione

 $options['ssl']['verify_peer'] = FALSE; $options['ssl']['verify_peer_name'] = FALSE; 

Nota del redattore : la disabilitazione della verifica SSL ha implicazioni sulla sicurezza. Senza la verifica dell’autenticità delle connessioni SSL / HTTPS, un malintenzionato può impersonare un endpoint fidato (come GitHub o qualche altro host Git remoto) e sarai vulnerabile a un attacco Man-in-the-Middle . Assicurati di comprendere appieno i problemi di sicurezza prima di utilizzare questo come soluzione.

e ricarica il tuo browser e prova a eseguire nuovamente il tuo progetto. Per me mi metto in questo modo:

 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; } 

Spero che risolverai questo problema …..

Prova a cambiare l’ app/config/email.php

smtp alla mail

Una soluzione semplice potrebbe essere la modifica di config / mail.php e la distriggerszione di TLS

 'encryption' => env('MAIL_ENCRYPTION', ''), //'tls'), 

Fondamentalmente facendo questo

 $options['ssl']['verify_peer'] = FALSE; $options['ssl']['verify_peer_name'] = FALSE; 

Si dovrebbe perdere anche la sicurezza, ma nella prima opzione non è necessario immergersi nel codice del fornitore.

Nota del redattore : come ha detto l’autore: disabilitare la verifica SSL ha implicazioni sulla sicurezza. Senza la verifica dell’autenticità delle connessioni SSL / HTTPS, un malintenzionato può impersonare un endpoint fidato (come GitHub o qualche altro host Git remoto) e sarai vulnerabile a un attacco Man-in-the-Middle . Assicurati di comprendere appieno i problemi di sicurezza prima di utilizzare questo come soluzione.

Lettura dell’app / config / mailphp

 Supported : "smtp", "mail", "sendmail" 

A seconda delle utilità di posta installate sulla macchina, inserire il valore della chiave del driver. farei

 'driver' => 'sendmail', 

Per risolvere questo problema, devi prima controllare i certificati SSL dell’host a cui ti stai connettendo. Ad esempio usando ssllabs o altri strumenti ssl . Nel mio caso il certificato intermedio era sbagliato.

Se il certificato è ok, assicurati che openSSL sul tuo server sia aggiornato. Esegui openssl -v per verificare la tua versione. Forse la tua versione è troppo vecchia per funzionare con il certificato.

In casi molto rari potresti voler disabilitare le funzionalità di sicurezza ssl come verify_peer, verify_peer_name o allow_self_signed. Per favore sii molto attento a questo e non usarlo mai in produzione. Questa è solo un’opzione per i test temporanei.