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
'IT TIP' 카테고리의 다른 글
UITableView에 바닥 글을 추가하는 방법은 무엇입니까? (0) | 2020.12.29 |
---|---|
git이 cygwin에서 파일을 실행 불가능하게 만드는 것을 막는 방법은 무엇입니까? (0) | 2020.12.29 |
지원 저항 알고리즘-기술 분석 (0) | 2020.12.29 |
Express.js에서 SSL / https를 강제하는 방법 (0) | 2020.12.29 |
이동 : 고유 한 경우 추가 (0) | 2020.12.29 |