WordPress n’a pas pu établir de connexion sécurisée vers Wordpress.org avec un serveur web lighttpd

WordPress n’a pas pu établir de connexion sécurisée vers WordPress.org avec un serveur web lighttpd

Aucun commentaire sur WordPress n’a pas pu établir de connexion sécurisée vers WordPress.org avec un serveur web lighttpd 6 views

Je voulais faire tourner mon nouveau serveur web sur un erstaz de rasperry pi, un quadcore ARMCortex avec une distrib Openwrt. Une fois mis en place mon LLMP, grosse déception , la mise à jour automatique des plugins, des thémes, Akismet , les urls embarqués ne fonctionnaient pas.

Sur les forums, on finit par lire, il faudra tout faire à la maisn, ça arrive souvent pour un serveur que l’on héberge !!! réponse non acceptable pour moi , je pars en guerre contre le superbe message de wordpress : »WordPress n’a pas pu établir de connexion sécurisée vers WordPress.org »

Première solution et première désillusion : le DNS

On m’aiguille d’abord sur un problème de DNS sur l’adresse api.wordpress.org.
Depuis la console du serveur linux, cette adresse pingue parfaitement , de plus en utilisant curl en ligne de commande, l’adresse en https est parfaitement résolue….fausse piste qui m’a pris des bonnes heures.

Deuxième solution merdique : le PHP CURL et ses libraries

WordPress pour communiquer avec api.wordpress.org utilise une fonction PHP , qui est curl , que l’on peut tester avec un fichier php suivant et qui va vous renseigner , correctement ou pas , sur ce que fait wordpress en communiquant. Je teste avec ce fichier à la racine de mon web :

function get_tls_version($sslversion = null)
{
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "https://www.howsmyssl.com/a/check");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
if ($sslversion !== null) {
curl_setopt($c, CURLOPT_SSLVERSION, $sslversion);
}
$rbody = curl_exec($c);
if ($rbody === false) {
$errno = curl_errno($c);
$msg = curl_error($c);
curl_close($c);
return "Error! errno = " . $errno . ", msg = " . $msg;
} else {
$r = json_decode($rbody);
curl_close($c);
return $r->tls_version;
}
}
echo "
\n";
echo "OS: " . PHP_OS . "\n";
echo "uname: " . php_uname() . "\n";
echo "PHP version: " . phpversion() . "\n";
$curl_version = curl_version();
echo "curl version: " . $curl_version["version"] . "\n";
echo "SSL version: " . $curl_version["ssl_version"] . "\n";
echo "SSL version number: " . $curl_version["ssl_version_number"] . "\n";
echo "OPENSSL_VERSION_NUMBER: " . dechex(OPENSSL_VERSION_NUMBER) . "\n";
echo "TLS test (default): " . get_tls_version() . "\n";
echo "TLS test (TLS_v1): " . get_tls_version(1) . "\n";
echo "TLS test (TLS_v1_2): " . get_tls_version(6) . "\n";
echo "
\n";

le résultat est sans appel, j’ai un problème TLS

OS: Linux
uname: Linux OpenWrt 4.1.17-g26a590a-dirty #1 SMP PREEMPT Tue Aug 29 17:28:38 CST 2017 aarch64
PHP version: 7.1.12
curl version: 7.50.0
SSL version: mbedTLS/1.3.17
SSL version number: 0
OPENSSL_VERSION_NUMBER: 100020df
TLS test (default): Error! errno = 35, msg = ssl_handshake returned - PolarSSL: (-0x7780) SSL - A fatal alert message was received from our peer
TLS test (TLS_v1): Error! errno = 35, msg = ssl_handshake returned - PolarSSL: (-0x7780) SSL - A fatal alert message was received from our peer
TLS test (TLS_v1_2): Error! errno = 35, msg = ssl_handshake returned - PolarSSL: (-0x7780) SSL - A fatal alert message was received from our peer

Sauf que non....

TROISIEME SOLUTION, la bonne: le user utilisé par lighttp

effectivement , sur OPENwrt , il s’agit d’un OS single user, du coup créer un utilisateur comme je l’ai fait (utilisateur http), ne lui a pas donné tous les privilèges et du coup lighttp n’avait pas tous les droits quand il utilisait php curl pour dialoguer avec api.wordpress.org. En utilisant root, wordpress dialogue bien avec api.wordpress.org, Akismet fonctionne , etc…

About the author:

Ingénieur ENSEA, Manager IT Support pour des grands comptes Fondateur du site frenchytech

Laisser un commentaire

retour en haut