programing

stream_socket_enable_crypto() 수정 방법: SSL 작업이 코드 1로 실패했습니다.

projobs 2022. 10. 2. 15:17
반응형

stream_socket_enable_crypto() 수정 방법: SSL 작업이 코드 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

Larabel 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' );
        } );

}
?>

기사 보니까 수정해야 할 게 있대요. 코드를 넣었는데 어디에 넣어야 할지 모르겠어요.

이 글을 읽고 있습니다.https://www.mimar.rs/en/sysadmin/2015/php-5-6-x-ssltls-peer-certificates-and-hostnames-verified-by-default/

그리고 이 php http://php.net/manual/en/migration56.openssl.php의 문서는 이해하기 어렵습니다.

그래서 내 질문은 이 문제를 어떻게 해결하느냐는 거야?

편집자 주의: SSL 검증을 비활성화하면 보안에 영향이 있습니다.SSL/HTTPS 연결의 신뢰성을 확인하지 않으면 악의적인 공격자가 Gmail과 같은 신뢰할 수 있는 끝점으로 가장하여 중간자 공격에 취약해질 수 있습니다.

이를 해결책으로 사용하기 전에 보안 문제를 완전히 이해해야 합니다.

/config/mail.php(라벨 5.1, 5.2, 5.4에서 테스트 및 작업)에 다음 코드를 추가할 수 있습니다.

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

편집자 주의: SSL 검증을 비활성화하면 보안에 영향이 있습니다.SSL/HTTPS 연결의 신뢰성을 확인하지 않으면 악의적인 공격자가 Gmail과 같은 신뢰할 수 있는 끝점으로 가장하여 중간자 공격에 취약해질 수 있습니다.

이를 해결책으로 사용하기 전에 보안 문제를 완전히 이해해야 합니다.

저는 이렇게 해결한 4.2라벨에도 이 오류가 있습니다.StreamBuffer.phpis_ xampp 을isisis isisisis isis is itis_db 니니다 。경로는 이렇습니다. 자기 .

C:\xampp\htdocs\itis_db\vendor\swiftmailer\lib\class\Swift\Transport\StreamBuffer.php

Stream Buffer의 이 기능을 알아봅니다.php

private function _establishSocketConnection()

그리고 이 두 줄을 이 함수의 안쪽에 붙입니다.

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

브라우저를 다시 로드하고 프로젝트를 다시 실행해 보십시오.저는 이렇게 입어요.

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

당신이 이 문제를 해결하길 바랍니다.

.app/config/email.php

smtp로로 합니다.mail

및 Larabel (5,6,7 이상), WordPress (WordPress) 수정 PHP + cURL실장이라고 생각합니다.

cURL 웹사이트에서 최신 cacert.pem 파일을 다운로드합니다.

wget https://curl.haxx.se/ca/cacert.pem

★★php.ini 수 요.php --ini검색하려면 다음 두 행을 업데이트(또는 아직 존재하지 않는 경우 작성)하십시오.

curl.cainfo="/path/to/downloaded/cacert.pem"
...
openssl.cafile="/path/to/downloaded/cacert.pem"

되어 있을 가 있으므로 한 「」의 패스로 합니다.따라서 코멘트를 해제하고 다운로드된 경로로 두 값을 모두 편집합니다.cacert.pem

PHP 및 Nginx/Apache를 재시작합니다.

편집: 필요한 경우가 있습니다.chown/chmod다운로드한 증명서 파일을 PHP(및 이를 실행하는 사용자)가 읽을 수 있도록 합니다.

원천

편집자 주의: SSL 검증을 비활성화하면 보안에 영향이 있습니다.SSL/HTTPS 연결의 신뢰성을 확인하지 않으면 악의적인 공격자가 Gmail과 같은 신뢰할 수 있는 끝점으로 가장하여 중간자 공격에 취약해질 수 있습니다.

이를 해결책으로 사용하기 전에 보안 문제를 완전히 이해해야 합니다.

이 문제를 쉽게 해결할 수 있는 방법은 구성/메일을 편집하는 것입니다.php 및 TLS 끄기

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

기본적으로 이렇게 하면

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

보안도 느슨하게 해야 하지만 첫 번째 옵션에서는 공급업체의 코드를 자세히 살펴볼 필요가 없습니다.

.env를 편집하고 메일 구성 행 뒤에 이 행을 추가합니다.

MAIL_ENCRYPTION=""

저장 후 이메일 전송 시도

이 문제는 최근 변경 없이 PHPmailer를 사용하는 플러그인과 워드프레스를 사용하는 서버 중 하나에서 오늘부터 발생합니다.

해결 방법: sudo yum install ca-certificates

다시 완벽하게 동작하게 되었습니다.또, httpd 재기동도 실시했습니다(필요한지는 잘 모르겠습니다).

진짜 문제는 알 수 없어요.아마 오래된 CA 증명서 패키지에 하드코드된 날짜일 거예요.

이 문제를 해결하려면 먼저 연결 중인 호스트의 SSL 인증서를 확인해야 합니다.예를 들어 sllabs 또는 기타 ssl 도구를 사용합니다.내 경우 중간 인증서가 잘못되었다.

있는지 합니다.【SSL】 실행합니다.openssl -v버전을 확인합니다.증명서를 사용하기에는 버전이 너무 오래된 것 같습니다.

매우 드문 경우지만 verify_peer, verify_peer_name 또는 allow_self_signed와 같은 SSL 보안 기능을 사용하지 않도록 설정할 수 있습니다.이것은 매우 주의하여 생산에 절대 사용하지 말아 주세요.이것은 일시적인 테스트의 옵션일 뿐입니다.

마지막으로! 그것은 나의 AVG 바이러스 백신이었고, 그것은 이메일 실드라고 불리는 기능을 가지고 있고, 그것을 무효로 하고, 에러는 사라졌습니다.

암호화 타입을 SSL에서 TLS로 변경하는 것은 나에게 효과가 있다.

내 경우, 나는 팔로우했다.

$mail = new PHPMailer;
$mail->isSMTP();            
$mail->Host = '<YOUR HOST>';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = '<USERNAME>';
$mail->Password = '<PASSWORD>';
$mail->SMTPSecure = '';
$mail->smtpConnect([
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    ]
]);
$mail->smtpClose();

$mail->From = '<MAILFROM@MAIL.COM>';
$mail->FromName = '<MAIL FROM NAME>';

$mail->addAddress("<SENDTO@MAIL.com>", '<SEND TO>');

$mail->isHTML(true);
$mail->Subject= '<SUBJECTHERE>';
$mail->Body =  '<h2>Test Mail</h2>';
$isSend = $mail->send();

벤더\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer로 이동합니다.php

250 행을 코멘트하고 다음 행을 추가합니다.

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

앱/구성/메일 페이지 읽기

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

컴퓨터에 설치되어 있는 메일 유틸리티에 따라 드라이버 키의 값을 입력합니다.하고 싶다

'driver' => 'sendmail',

Larabel 5.4
gmail용


.env 파일

MAIL_DRIVER=mail
MAIL_HOST=mail.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<username>@gmail.com
MAIL_PASSWORD=<password>
MAIL_ENCRYPTION=tls

를 참조해 주세요.php

'driver' => env('MAIL_DRIVER', 'mail'),

'from' => [
    'address' => env(
        'MAIL_FROM_ADDRESS', '<username>@gmail.com'
    ),
    'name' => env(
        'MAIL_FROM_NAME', '<from_name>'
    ),
],
$default = [ ... ];

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

$environment = env('APP_ENV');

if ($environment === 'local') {
    return array_merge($default, $turnOffSSL);
}

return $default;

언급URL : https://stackoverflow.com/questions/30556773/how-to-fix-stream-socket-enable-crypto-ssl-operation-failed-with-code-1

반응형