3 votes

Comment trouver si un certificat SSL est installé sur un serveur ? (À l'aide de PHP)

Comment savoir si le site est en SSL ou non? Je travaille sur un plugin WP pour des transactions en direct et il est important pour le plugin de vérifier si le site (sur lequel le plugin est installé) utilise SSL ou non. Je dois afficher un message d'avertissement sur la page de paiement si le site n'est pas en SSL.

3voto

Lex Points 5801

Vous pouvez vérifier la variable $_SERVER['HTTPS'].

1voto

Alfred Points 48
fonction is_exist_ssl($domain){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://".$domain);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);

if(!curl_error($ch)){
$info = curl_getinfo($ch);
if($info['http_code'] == 200){
return true;
}
return false;
}else{
return false;
}
}

utilisation:

$domain = 'uniapple.net';

if(is_exist_ssl($domain)){
echo "SSL est activé!";
}else{
echo "Pas de SSL"; 
}

//utilisation ::
if(!isset($_SERVER['REDIRECT_HTTPS']) || $_SERVER['REDIRECT_HTTPS'] != 'on'){
if(is_exist_ssl($domain)){
header('location : https://'.$domain);
}
}

1voto

Andre Gagnon Points 58

Étant donné que cette question est ancienne et que les réponses sont un peu dépassées, j'ai pensé apporter ma contribution!

J'ai vu que vous demandiez à propos d'un plugin WordPress. WordPress possède une fonction is_ssl() pour vérifier si une page utilise le SSL depuis WordPress 2.6.

Voici un exemple:

if ( is_ssl() ) {
  print_r('Le SSL est activé!');
} else {
  print_r('Veuillez installer un certificat SSL!');
}

0voto

Sandeep Manne Points 2568

Si c'est une requête HTTPS, la valeur 'HTTPS' dans le tableau superglobal $_SERVER sera définie et sera définie sur 'on'. Si ce n'est pas une requête HTTPS, elle ne sera pas définie.

Donc pour tester s'il s'agit d'une requête HTTPS en PHP, vous pourriez faire ceci:

    if( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) {
        ...
    }

Alternativement, vous pourriez le définir en tant que constante si vous avez besoin de savoir s'il s'agit d'une requête HTTPS plusieurs fois dans votre code comme ceci:

define('IS_HTTPS_REQUEST', isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on');

0voto

Bruno Points 47560

Il existe plusieurs solutions à ce problème décrit dans cette question. Si vous utilisez Apache Httpd et que vous pouvez réduire le chemin à un préfixe spécifique, vous pouvez utiliser SSLRequireSSL dans une directive Location. Alternativement, vous pouvez vérifier $_SERVER['HTTPS'] en PHP, si elle est définie (cela peut dépendre du serveur web, mais c'est généralement le cas).

Plus important encore, ne vous concentrez pas trop sur la vérification que la page que vous servez est servie via HTTPS. Il appartient au client de vérifier cela, car une fois qu'il atteint le serveur, il est trop tard : il a peut-être déjà été intercepté par un attaquant MITM (qui pourrait même faire la demande via HTTPS même si le client authentique ne l'a pas fait). J'ai fourni une explication plus détaillée de ce problème dans cette réponse. D'un point de vue UI, vous devriez indiquer clairement à l'utilisateur qu'il va accéder à une section "sécurisée" et qu'il lui revient de vérifier que les requêtes ultérieures se feront via HTTPS.

Il n'est pas nécessairement mauvais de vérifier que votre serveur fonctionne effectivement via HTTPS, mais cela n'aide pas beaucoup d'un point de vue sécurité. Ce qui importe vraiment, c'est que tous les liens vers cette section sécurisée doivent utiliser https:// (et ne doivent pas se fier à une réécriture automatique d'URL pour le faire).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X