나는 일반적으로이 인수를 사용 wp_remote_get
하여wp_remote_post
array(
'sslverify' => false
)
보안상의 이유로 설정하고 싶습니다 true
(또는 기본값이 true이므로 제거하고 싶습니다 ).
그렇게하면 문제가 발생합니까?
나는 일반적으로이 인수를 사용 wp_remote_get
하여wp_remote_post
array(
'sslverify' => false
)
보안상의 이유로 설정하고 싶습니다 true
(또는 기본값이 true이므로 제거하고 싶습니다 ).
그렇게하면 문제가 발생합니까?
답변:
TL; DR : 예. WordPress 3.7 이상에서 해당 설정을 제거하십시오.
과거에는 많은 사람들이 sslverify = false 매개 변수를 추가했습니다. PHP를 설치할 때 인증서를 제대로 확인할 수 없기 때문입니다.
일반적으로 PHP 설치가 최신 CA 루트 인증서 사본으로 업데이트되지 않았기 때문입니다. 루트 인증서는 자주 변경되며 일반적인 브라우저 업데이트에서 발생하기 때문에 일반적으로이 변경 사항을 알 수 없습니다. 글쎄, PHP가 https URL을 검색하는 브라우저처럼 작동하면 루트 인증서 업데이트도 필요합니다. 그리고 대부분의 호스트는 PHP를 업데이트하거나 인증서 파일과 같은 특정 부분을 업데이트하지 않습니다.
WordPress가 버전 3.7에서 자동 업데이트를 구현할 때 보안 통신이 필요하도록 WordPress.org API를 업그레이드해야한다고 결정되었습니다. 이때 WordPress는 Mozilla에서 제공 한 CA Root Certificates 파일 자체의 사본을 포함하기 시작했습니다. 따라서 WordPress 3.7부터 WP_HTTP API 함수는이 파일을 사용하여 인증서 설치를 수행하며 PHP 설치와 함께 패키지에 포함 된 이전 버전이나 오래된 버전은 아닙니다.
따라서 WordPress 3.7 이상에서는 sslverify 매개 변수를 제거하고 http 기능이 올바른 인증서 확인을 수행하는 것이 좋습니다. 알려진 CA 중 하나가 서명 한 키를 사용하여 SSL을 실행하는 최신 서버는 올바르게 확인됩니다. WP_HTTP에는 최신 루트 인증서의 사본이 있어야하며 핵심 프로젝트는 WordPress에서 해당 인증서 파일을 일반 업데이트와 함께 업데이트합니다.
SSL 확인에 실패 할 수있는 많은 이유가 있습니다. 잘못된 .ini
파일 / 설정으로의 리디렉션이 너무 많 거나 인증서 또는 하위 도메인이없는 경우 어떤 경우에는, 당신은 할 이유 검색해야 하는 대한을하고 그것을 해결 . 그 주위에 방법 이 없습니다 .
그러나 일시적 으로 해당 문제를 해결하려면 (코드를 더 개발하고 나중에 SSL 오류를 수정해야한다고 가정 함) 필터를 사용할 수 있습니다.
add_filter( 'https_ssl_verify', '__return_false' );
원격 요청 중에이를 실행하면 HTTP 요청 중에 트리거되는 필터에 연결된 콜백으로 랩핑해야합니다. 올바른 사례에 대한 확인을 실제로 제거하고 있는지 확인하고 다른 요청의 보안을 유지하기 위해 한 번만 실행해야합니다.
add_filter( 'http_request_args', function( $params, $url )
{
// find out if this is the request you are targeting and if not: abort
if ( 'foo' !== $params['foo'] )
return $params;
add_filter( 'https_ssl_verify', '__return_false' );
return $params;
}, 10, 2 );
이 플러그인이 공개적으로 배포 된 플러그인 인 경우 사용자가 켜거나 끌 수있는 간단한 옵션에 추가 할 수 있습니다. 확인 된 요청을 먼저 시도하고 그렇지 않은 경우 (및 사용자가 서명되지 않은 요청을 선택한 경우) 잠재적으로 안전하지 않은 요청으로 전환 할 수 있습니다.
경험 법칙 :
마 결코 사용자가 그렇게하기로 합의하고, 위험을 알고 때까지 보안되지 않은 요청을 수행하지 않습니다.
WordPress는 기본 서버 소프트웨어 (일반적으로 cURL)를 사용하여 네트워크 요청을 수행 할 수 있습니다. 간단히 말해서 소프트웨어가 좋고 거기에 있기 때문입니다.
다양한 이유로 (내 자신을 들여다 보지 않은) 일부 서버에서는 서버 소프트웨어가 보안 연결을 "확인"할 수 없어서 오류가 발생하는 것이 일반적입니다.
그래서: