IT TIP

PHP SoapClient에서 인증서 확인 비활성화

itqueen 2020. 12. 29. 08:13
반응형

PHP SoapClient에서 인증서 확인 비활성화


요약 :
PHP에 내장 된 SoapClient 클래스를 HTTPS를 통해 유효하지 않은 인증서로 서버에 연결하도록 강제하는 방법이 있습니까?

왜 그렇게하고 싶습니까?
아직 DNS 항목이나 인증서가없는 서버에 새 응용 프로그램을 배포했습니다. DNS 항목을 설정하고 인증서를 수정 하기 전에 SoapClient로 연결을 시도하고 싶습니다 . 가장 합리적인 방법은 테스트 중에 클라이언트가 인증서를 무시하도록하는 것 같습니다.

이것이 엄청난 보안 위험이라는 것을 깨닫지 못합니까?
이것은 테스트 용입니다. 서비스가 생산에 들어가면 유효한 인증서가 있고 클라이언트는이를 검증해야합니다.


SoapClient매개 변수에 스트림 컨텍스트가져 와서 직접 만들 수 있습니다. 이렇게하면 전송 계층의 거의 모든 측면을 제어 할 수 있습니다.

$context = stream_context_create([
    'ssl' => [
        // set some SSL/TLS specific options
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    ]
]);

$client  = new SoapClient(null, [
    'location' => 'https://...',
    'uri' => '...', 
    'stream_context' => $context
]);

선적 서류 비치:


수락 된 답변은 비 WSDL 모드 에서만 작동 합니다. WSDL 모드 에서 이것을 사용하려고하면 (즉, WSDL 파일 url을 첫 번째 인수로 전달) WSDL 파일을 다운로드 할 때 스트림 컨텍스트가 무시된다는 사실에 직면하게됩니다. 따라서 WSDL 파일이 손상된 인증서가있는 서버에도있는 경우 실패하고 메시지가 표시 될 가능성이 큽니다 failed to load external entity. 여기여기에서 더 많은 것을 보십시오 .

제안 된대로 가장 간단한 방법은 WSDL 파일을 수동으로 다운로드하고 로컬 복사본을 SoapClient에 전달하는 것입니다. 예를 들어 file_get_contents수락 된 답변에서 매우 동일한 스트림 컨텍스트를 사용하여 다운로드 할 수 있습니다 .

SoapServer를 만들 때도이 작업을 수행해야합니다.


PHP 5.6.8의 올바른 목록은 다음과 같습니다.

'ssl' => array('verify_peer_name'=>false, 'allow_self_signed' => true),

참조 URL : https://stackoverflow.com/questions/8443618/disable-certificate-verification-in-php-soapclient

반응형