stream_socket_enable_crypto(): SSL operation failed with code 1
PHP failed to set up TLS on a stream
Seen in PHP streams, PHPMailer, Symfony Mailer, SwiftMailer, file_get_contents
PHP could not complete TLS on a socket, usually for SMTP STARTTLS or HTTPS streams; the OpenSSL message that follows gives the reason.
Common causes
- "certificate verify failed": PHP has no CA bundle (openssl.cafile) or the server chain is incomplete.
- Connecting to a mail server by IP or a shared hostname that does not match its certificate.
- No common TLS version with an old server or old PHP/OpenSSL build.
How to fix it
- Read the "OpenSSL Error messages" line after the warning.
- Set openssl.cafile in php.ini to a current CA bundle.
- Connect using the hostname on the server certificate, such as the provider SMTP hostname.
- Update PHP and OpenSSL if the server requires TLS 1.2 or later.
Got a different message? Paste it into the error explainer.
Related errors
- [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed · Python couldn't verify the server's certificate
- certificate verify failed: Hostname mismatch, certificate is not valid for · The certificate doesn't cover this hostname
- PKIX path building failed · Java can't build a trusted certificate chain
- javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure · The server rejected the TLS handshake
- No subject alternative DNS name matching example.com found · The certificate doesn't cover this hostname
- x509: certificate signed by unknown authority · Go doesn't trust the certificate's issuer
- x509: certificate is valid for X, not Y · The certificate doesn't cover this hostname
- remote error: tls: handshake failure · The server rejected the TLS handshake
- The SSL connection could not be established, see inner exception. · .NET could not complete the TLS handshake
- The remote certificate is invalid according to the validation procedure · .NET doesn't trust the server's certificate
- The request was aborted: Could not create SSL/TLS secure channel. · .NET Framework could not negotiate TLS
- cURL error 60: SSL certificate problem: unable to get local issuer certificate · PHP cURL can't verify the server's certificate