현재 위치: > 최신 기사 목록> 스트림 _socket_enable_crypto 오류 "SSL 작동 실패"가 PHP 에보고 된 경우 효과적인 솔루션

스트림 _socket_enable_crypto 오류 "SSL 작동 실패"가 PHP 에보고 된 경우 효과적인 솔루션

M66 2025-07-10

PHP에서 stream_socket_enable_crypto 함수를 사용하는 경우 "SSL 작동 실패"오류 메시지가 발생합니다. 이 문제는 일반적으로 서버와 암호화 된 연결을 설정할 때, 특히 SSL/TLS 암호화 프로토콜이 활성화 될 때 발생합니다. 이 문제를 해결하려면 SSL 구성, 인증서 및 PHP 환경에 대한 자세한 문제 해결을 수행해야합니다. 이 기사는 개발자 가이 문제를 해결할 수 있도록 효과적인 솔루션을 소개합니다.

1. 문제 분석

stream_socket_enable_crypto 는 스트림 암호화를 가능하게하는 데 PHP가 사용하는 함수이며, 일반적으로 스트림 소켓 연결과 함께 사용됩니다. 이 오류는 다양한 상황에서 발생할 수 있으며 일반적인 이유는 다음과 같습니다.

  1. 유효하지 않거나 만료 된 인증서 : SSL 인증서에 문제가있는 경우 연결이 실패 할 수 있습니다.

  2. OpenSSL 구성 문제 : PHP는 OpenSSL 확장에 의존하여 암호화 작업을 처리합니다. OpenSSL이 올바르게 구성되지 않으면 SSL 작업이 실패 할 수 있습니다.

  3. 서버 지원 문제 : 서버의 SSL 구성이 호환되지 않거나 지원되는 프로토콜 버전이 다를 수 있습니다.

  4. PHP 구성 문제 : PHP의 OpenSSL 확장이 활성화되거나 부적절하게 구성되지 않아 암호화 작업이 실패 할 수도 있습니다.

2. 솔루션

1. SSL 인증서를 확인하십시오

먼저 서버 측에서 사용하는 SSL 인증서가 유효하고 클라이언트가 올바르게 확인할 수 있는지 확인하십시오. OpenSSL S_Client 와 같은 브라우저 또는 명령 줄 도구를 통해 SSL 인증서의 유효성을 확인할 수 있습니다.

예를 들어 명령을 사용하여 인증서를 확인하십시오.

 <span><span>openssl s_client -connect yourserver.com:443
</span></span>

인증서가 유효하지 않거나 만료 된 경우 서버 관리자에게 문의하여 인증서를 업데이트하십시오.

2. PHP OpenSSL 확장을 활성화합니다

PHP 구성에서 OpenSSL 확장이 활성화되어 있는지 확인하십시오. php.ini 파일에서 다음 구성을 확인하십시오.

 <span><span><span class="hljs-attr">extension</span></span><span>=openssl
</span></span>

OpenSSL이 활성화되지 않은 경우 라인을 사용하지 않고 PHP 서비스를 다시 시작하십시오.

PHP의 phpinfo () 함수를 사용하여 OpenSSL 확장이로드되었는지 확인할 수 있습니다. 로드되지 않은 경우 PHP를 다시 컴파일하거나 적절한 OpenSSL 라이브러리를 설치하십시오.

3. 올바른 암호화 프로토콜을 구성하십시오

SSL/TLS 프로토콜 버전 불일치는 또한 "SSL 작동 실패"오류의 일반적인 원인입니다. stream_socket_enable_crypto 함수에서, 강조 프로토콜은 stream_crypto_method_sslv23_client 와 같은 매개 변수를 통해 지정할 수 있습니다. 프로토콜 버전을 변경하여 문제를 해결할 수 있습니다.

 <span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_socket_client</span></span><span>(</span><span><span class="hljs-string">"ssl://yourserver.com:443"</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stream</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"연결이 실패했습니다: <span class="hljs-subst">$errstr</span></span></span><span> (</span><span><span class="hljs-subst">$errno</span></span><span>)\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-title function_ invoke__">stream_socket_enable_crypto</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>, STREAM_CRYPTO_METHOD_TLS_CLIENT);
}
</span></span>

stream_crypto_method_tls_client가 제대로 작동하지 않으면 stream_crypto_method_sslv23_client 또는 stream_crypto_method_tlsv1_2_client 등과 같은 다른 암호화 프로토콜 옵션을 시도해 볼 수 있습니다.

4. PHP 구성 및 시스템 환경을 점검하십시오

때로는 PHP 구성 또는 시스템 환경이 OpenSSL 사용에 영향을 줄 수 있습니다. 서버의 OpenSSL 라이브러리 및 PHP 구성이 최신 버전인지 확인하십시오. 다음 명령을 실행하여 OpenSSL 버전을 확인할 수 있습니다.

 <span><span>openssl version
</span></span>

시스템에서 이전 OpenSSL 버전을 사용하는 경우 최신 버전으로 업데이트하는 것이 좋습니다. 이전 버전의 OpenSSL은 새로운 암호화 프로토콜을 지원하지 않아서 연결 고장을 초래할 수 있습니다.

5. 서버 측 SSL 구성 확인

클라이언트 구성에 문제가없는 경우 서버 측에서 SSL 구성을 확인할 수 있습니다. 서버에 올바른 SSL/TLS 프로토콜 버전과 암호화 알고리즘이 활성화되어 있는지 확인하십시오. 많은 최신 서버는 구형 SSL 버전 (예 : SSLV2 및 SSLV3)을 비활성화 했으므로 양 당사자의 계약 버전이 일관되도록해야합니다.

다음 명령을 사용하여 서버가 필요한 SSL/TLS 프로토콜 버전을 지원하는지 확인하십시오.

 <span><span>openssl s_client -connect yourserver.com:443 -tls1_2
</span></span>

6. 디버그 로그

문제를 더 잘 진단하려면 PHP에서 자세한 오류 로그를 활성화 할 수 있습니다. 더 많은 디버깅 정보를 출력하도록 Error_ReportingDisplay_Errors를 설정하십시오.

 <span><span><span class="hljs-title function_ invoke__">error_reporting</span></span><span>(E_ALL);
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'display_errors'</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
</span></span>

또한 Stream_Context_Create를 사용하여 SSL 컨텍스트 옵션을 설정하여 암호화 된 연결의 동작을 디버그하고 제어하는 ​​데 도움이 될 수 있습니다.

 <span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([
    </span><span><span class="hljs-string">'ssl'</span></span><span> =&gt; [
        </span><span><span class="hljs-string">'verify_peer'</span></span><span> =&gt; </span><span><span class="hljs-literal">true</span></span><span>,
        </span><span><span class="hljs-string">'verify_peer_name'</span></span><span> =&gt; </span><span><span class="hljs-literal">true</span></span><span>,
        </span><span><span class="hljs-string">'allow_self_signed'</span></span><span> =&gt; </span><span><span class="hljs-literal">false</span></span><span>,
        </span><span><span class="hljs-string">'cafile'</span></span><span> =&gt; </span><span><span class="hljs-string">'/path/to/cacert.pem'</span></span><span>,
    ]
]);

</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_socket_client</span></span><span>(</span><span><span class="hljs-string">"ssl://yourserver.com:443"</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>, STREAM_CLIENT_CONNECT, </span><span><span class="hljs-variable">$context</span></span><span>);
</span></span>

7. PHP 버전 업데이트

위의 단계가 여전히 문제를 해결하지 않으면 PHP 업그레이드를 최신 안정 버전으로 고려할 수 있습니다. 구형 PHP 버전에는 업그레이드 후 수정 될 수있는 호환성 문제가있을 수 있습니다.

3. 요약

"SSL 작동 실패"오류가 발생하면 일반적으로 SSL 구성 문제, 인증서 문제 또는 OpenSSL 확장 구성 문제로 인해 발생합니다. 이 문제에 대한 효과적인 솔루션은 다음과 같습니다.

  1. 인증서의 유효성을 확인하십시오.

  2. PHP에 SSL 확장이 활성화되어 있는지 확인하십시오.

  3. 올바른 암호화 프로토콜을 구성하십시오.

  4. PHP 및 OpenSSL 버전의 호환성을 확인하십시오.

  5. 서버 측 SSL 설정을 구성 및 디버그합니다.

위의 방법을 통해 암호화 된 연결을 성공적으로 설정하기 위해 stream_socket_enable_crypto 기능의 오류 문제를 효과적으로 해결할 수 있어야합니다.