PHP: verificare la connessione SSL di un sito con le API di SSL Labs

PHP: verificare la connessione SSL di un sito con le API di SSL Labs

In questo tutorial vedremo come validare la connessione SSL di un sito utilizzando le API di SSL Labs con PHP.

SSL Labs prevede che le richieste all'endpoint specifico delle API si susseguano fino a quando non viene comunicato l'esito finale dell'analisi.

Creiamo una classe per gestire le richieste HTTP alle API.

class Request {
    const API_URL = 'https://api.ssllabs.com/api/v3/analyze';
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function send()
    {
        if(!filter_var('https://' . $this->host, FILTER_VALIDATE_URL)) {
            return null;
        }
        $url = self::API_URL . '?host=' . $this->host;
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);

        $result = curl_exec($ch);
        if(!$result) {
            return null;
        }

        curl_close($ch);

        return json_decode($result, true);
    }
}

Poichè dovremo inviare richieste ripetute, dobbiamo prevedere un ritardo che consenta di creare un intervallo tra una richiesta e l'altra. Se le API ci comunicheranno la fine dell'analisi o se dovesse verificarsi un errore, dovremo interrompere la serie delle richieste.

Possiamo quindi definire la classe principale.

class SSLLabs {
    private $host;
    private $endpoints;
    private $delay;

    public function __construct($host, $delay)
    {
        $this->host = $host;
        $this->delay = $delay;
        $this->request = new Request($this->host);
        $this->endpoints = [];
    }

    public function getEndpoints()
    {
        return $this->endpoints;
    }

    public function check()
    {
        sleep($this->delay);
        $results = $this->request->send();
        $this->endpoints[] = $results;

        if(!$results || strtolower($results['status']) === 'ready') {
            return false;
        }

        return true;

    }
}

I risultati delle richieste vengono progressivamente salvati nell'array endpoints. Possiamo usare la classe in questo modo:

$sslLabs = new SSLLabs('phptutorial.it', 2);

while($sslLabs->check()) {
    print_r($sslLabs->getEndpoints());
}
exit;
Torna su