¿Es seguro usar sslverify => true para con wp_remote_get / wp_remote_post

18

Normalmente uso este argumento para evitar errores con wp_remote_getywp_remote_post

array(
    'sslverify' => false
)

Por razones de seguridad, me gustaría establecerlo en true(o eliminarlo ya que el valor predeterminado es verdadero).

¿Debo esperar algún problema al hacer eso?

Xaver
fuente

Respuestas:

23

TL; DR: Sí, elimine esa configuración a partir de WordPress 3.7 o posterior.

En el pasado, muchas personas agregaron el parámetro sslverify = false específicamente porque su instalación de PHP no pudo verificar adecuadamente el certificado.

Por lo general, esto se debía a que la instalación de PHP no se había actualizado con la última copia de los certificados raíz de CA. Los certificados raíz cambian de vez en cuando, y normalmente no se nota este cambio porque ocurre en las actualizaciones normales del navegador. Bueno, cuando tienes PHP actuando como un navegador para recuperar URL https, entonces también necesita esas actualizaciones de certificados raíz. Y la mayoría de los hosts nunca actualizan PHP, ni actualizan ninguna parte específica de él (como el archivo de certificados).

Cuando WordPress implementó la actualización automática en la versión 3.7, se determinó que era necesario actualizar las API de WordPress.org para requerir una comunicación segura. En este momento, WordPress comenzó a incluir una copia del archivo de certificados raíz de CA en sí, procedente de Mozilla. Desde WordPress 3.7, por lo tanto, las funciones de la API WP_HTTP utilizan este archivo para hacer la verificación del certificado, y no cualquier versión antigua u obsoleta que esté empaquetada con su instalación PHP.

Por lo tanto, sí, con WordPress 3.7 o posterior, es recomendable eliminar el parámetro sslverify y permitir que las funciones http realicen una verificación de certificado adecuada. Cualquier servidor moderno que ejecute SSL con una clave firmada por una de las CA conocidas se verificará correctamente. El WP_HTTP debe tener una copia de los últimos certificados raíz, y el proyecto principal actualizará ese archivo de certificados en WordPress junto con las actualizaciones normales.

Otón
fuente
Gracias Otto, creo que esto ayuda mucho. Haré una verificación condicional en mi plugin
Xaver
9

Hay muchas razones que pueden permitir que una verificación SSL falle. Comenzando desde demasiados redireccionamientos a .iniarchivos / configuraciones incorrectas o simplemente faltando certificados o subdominios. En cualquier caso, deberá buscar el motivo y corregirlo . No hay forma de evitarlo.

Pero para solucionar temporalmente ese problema (supongamos que necesita desarrollar su código aún más y corregir el error SSL más adelante), puede usar un filtro:

add_filter( 'https_ssl_verify', '__return_false' );

Mientras ejecuta esto durante una solicitud remota, debe envolverlo en una devolución de llamada adjunta a un filtro que se activa durante dicha solicitud HTTP. Asegúrese de verificar si realmente está eliminando la verificación para el caso correcto , y asegúrese de ejecutar esto solo una vez para no desproteger otras solicitudes.

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

Si se trata de un complemento distribuido públicamente, es posible que desee adjuntarlo a una opción simple que el usuario puede activar o desactivar. También puede probar primero la solicitud verificada y, si no (y si el usuario ha optado por una solicitud sin firmar), cambie a una solicitud potencialmente insegura.

Regla de oro:

No Nunca realizar una petición no segura hasta que el usuario ha accedido a hacerlo y sabe de los riesgos.

emperador
fuente
1
Gracias. Estoy buscando el problema en mi entorno local
Xaver
4

WordPress puede confiar en el software del servidor subyacente (generalmente cURL) para realizar la solicitud de red. En pocas palabras porque es para lo que ese software es bueno y está ahí.

En algunos servidores debido a varias razones (nunca me había molestado en mirarme a mí mismo) es bastante típico que el software del servidor no pueda "verificar" conexiones seguras, produciendo dichos errores.

Entonces:

  • si ese es un código privado en los servidores que controlas, debes asegurarte de que los servidores estén haciendo solicitudes correctamente y esta configuración no esté deshabilitada
  • si ese es el código para la distribución pública, probablemente tampoco quiera deshabilitarlo, pero si es lo suficientemente popular, terminará en servidores donde está roto en algún momento y tendrá que admitirlo de alguna forma (de decirle a la gente se espera que la configuración adecuada proporcione la configuración para deshabilitarla para sus solicitudes, y así sucesivamente)
Rarst
fuente