É seguro usar sslverify => true para wp_remote_get / wp_remote_post

18

Eu normalmente uso esse argumento para evitar erros com wp_remote_getewp_remote_post

array(
    'sslverify' => false
)

Por motivos de segurança, gostaria de defini-lo como true(ou removê-lo, pois o padrão é verdadeiro).

Devo esperar algum problema ao fazer isso?

Xaver
fonte

Respostas:

23

TL; DR: Sim, remova essa configuração a partir do WordPress 3.7 ou posterior.

No passado, muitas pessoas adicionaram o parâmetro sslverify = false especificamente porque sua instalação do PHP não conseguiu verificar corretamente o certificado.

Normalmente, isso ocorreu porque a instalação do PHP não havia sido atualizada com a cópia mais recente dos Certificados Raiz da CA. O certificado raiz muda de vez em quando, e normalmente você não percebe essa alteração porque ocorre nas atualizações normais do navegador. Bem, quando você tem o PHP agindo como um navegador para recuperar URLs https, ele também precisa dessas atualizações de certificado raiz. E a maioria dos hosts nunca atualiza o PHP, nem atualiza qualquer parte específica (como o arquivo de certificados).

Quando o WordPress implementou a atualização automática na versão 3.7, foi determinado que era necessário atualizar as APIs do WordPress.org para exigir comunicação segura. Nesse momento, o WordPress começou a incluir uma cópia do próprio arquivo CA Root Certificates, originário da Mozilla. Desde o WordPress 3.7, portanto, as funções da API WP_HTTP usam esse arquivo para verificar o certificado, e não qualquer versão antiga ou desatualizada incluída na instalação do PHP.

Portanto, sim, com o WordPress 3.7 ou posterior, é recomendável remover o parâmetro sslverify e permitir que as funções http façam a verificação adequada do certificado. Qualquer servidor moderno executando SSL com uma chave assinada por uma das CAs conhecidas será verificado corretamente. O WP_HTTP deve ter uma cópia dos certificados raiz mais recentes, e o projeto principal atualizará esse arquivo de certificados no WordPress juntamente com as atualizações normais.

Otto
fonte
Obrigado Otto, acho que isso ajuda muito. Vou fazer uma verificação condicional no meu plug
Xaver
9

Existem vários motivos que podem permitir uma falha na verificação SSL. Começando de muitos redirecionamentos para .iniarquivos / configurações incorretos ou simplesmente faltando certificados ou subdomínios. De qualquer forma, você precisará pesquisar o motivo e corrigi-lo . Não maneira de contornar isso.

Mas, para solucionar temporariamente esse problema (digamos que você precise desenvolver mais seu código e corrigir o erro SSL posteriormente), você pode usar um filtro:

add_filter( 'https_ssl_verify', '__return_false' );

Como você está executando isso durante uma solicitação remota, envolva-a em um retorno de chamada anexado a um filtro que é acionado durante uma solicitação HTTP. Verifique se você realmente está removendo a verificação para o caso correto - e execute-o apenas uma vez para não garantir outras solicitações.

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

Se este for um plug-in distribuído publicamente, convém anexá-lo a uma opção simples que o usuário possa ativar ou desativar. Você também pode tentar a solicitação verificada primeiro e, se não (e se o usuário tiver optado por uma solicitação não assinada), alterne para uma solicitação potencialmente insegura.

Regra prática:

Você não executar uma solicitação não segura até que o usuário tenha concordado em fazê-lo e sabe dos riscos.

kaiser
fonte
11
Obrigado, eu estou procurando agora para a questão no meu ambiente local
Xaver
4

O WordPress pode confiar no software do servidor subjacente (normalmente cURL) para executar a solicitação de rede. Em poucas palavras, porque é para isso que o software é bom e existe.

Em alguns servidores, por várias razões (nunca me preocupei em me examinar), é bastante comum que o software do servidor não consiga "verificar" as conexões seguras, produzindo os erros.

Então:

  • se esse for um código privado nos servidores que você controla, verifique se os servidores estão fazendo solicitações corretamente e se essa configuração não está desabilitada
  • se esse é um código para distribuição pública, você provavelmente também não deseja desativá-lo, mas se for popular o suficiente, ele terminará em servidores onde está quebrado em algum momento e você terá que dar suporte a isso de alguma forma (dizendo às pessoas espera-se que a configuração adequada forneça a configuração para desativá-la para suas solicitações e assim por diante)
Rarst
fonte