On dirait que Paypal pourrait avoir mis à jour ses systèmes à la lumière du CANICHE attaque , provoquant des sites utilisant le PHP Paypal SDK à casser.
Je reçois l'erreur:
Paypal/Exception/PPConnectionException: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
/var/www/site/vendor/Paypal/sdk-core-php/lib/Paypal/Core/PPHttpConnection.php:91
/var/www/site/vendor/Paypal/sdk-core-php/lib/Paypal/Core/PPAPIService.php:66
/var/www/site/vendor/Paypal/sdk-core-php/lib/Paypal/Core/PPBaseService.php:82
/var/www/site/vendor/Paypal/adaptivepayments-sdk-php/lib/Paypal/Service/AdaptivePaymentsService.php:97
Que recommanderiez-vous pour résoudre ce problème sans compromettre la sécurité?
[~ # ~] mise à jour [~ # ~] : Comme l'a noté Jaffer, référentiel GitHub de Paypal a déjà fusionné les modifications ci-dessous, vous pouvez donc simplement mettre à jour votre SDK.
Au moins, cela semble fonctionner pour l'instant, bien que je devrai rechercher quel protocole il utilisera réellement.
\Paypal\Core\PPHttpConfig::$DEFAULT_CURL_OPTS[CURLOPT_SSLVERSION] = 1;
// 0 = default protocol (likely TLSv1), 1 = TLSv1; unsafe: 2 = SSLv2, 3 = SSLv3
Pour les autres personnes utilisant directement cURL, utilisez simplement
curl_setopt($handle, CURLOPT_SSLVERSION, 1);
MISE À JOUR:
Je viens de chercher source to cURL , ce sont les valeurs (//
commente le mien):
enum {
CURL_SSLVERSION_DEFAULT, // 0
CURL_SSLVERSION_TLSv1, // 1
CURL_SSLVERSION_SSLv2, // 2
CURL_SSLVERSION_SSLv3, // 3
CURL_SSLVERSION_LAST /* never use, keep last */ // 4
};
Donc, pour résumer, oui, 1 est TLSv1 et à en juger par le commentaire, vaut probablement mieux que 4.
Code mis à jour ci-dessus.
Paypal a officiellement publié une mise à jour du SDK PHP pour résoudre ce problème, qui a été publiée dans le Github PR Jaffer lié à
https://github.com/Paypal/rest-api-sdk-php/releases/tag/v0.13.1
Pour les personnes qui utilisent https://github.com/Quixotix/PHP-Paypal-IPN , définissez simplement false sur force_ssl_v3:
$listener = new IpnListener();
$listener->force_ssl_v3 = false;