Utiliser TLS/SSL avec notre librairie PHP

Utiliser TLS/SSL avec notre librairie PHP

Notre librairie PHP supporte le chiffrement SSL/TLS depuis plusieurs mois. Cela permet d'utiliser la librairie pour se connecter à VirtualHub v2.0 et à VirtualHub for Web. Voyons comment utiliser cette fonctionnalité pour établir une connexion sécure entre la librairie et VirtualHub.



L'utilisation du chiffrement SSL/TLS est très simple. Il suffit d'ajouter le préfixe "https://" à l'adresse de VirtualHub lors de l'appel à YAPI::RegisterHub.

YAPI::RegisterHub("https://secure.example.com/vhub4web");
$module = YModule::FirstModule();
while (!is_null($module)) {
    printf("%s (%s)<br>\n", $module-&gt;get_serialNumber(),
           $module-&gt;get_productName());
    $module=$module-&gt;nextModule();
}
YAPI::FreeAPI();



Notez que contrairement aux autres libraires que nous proposons, la librairie PHP ne supporte pas les connexions Websocket. Il n'est donc pas possible d'utiliser le préfixe "wss://" pour les Websocket sécurisés.

Les certificats dans la librairie PHP


Note: nous avions expliqué le fonctionnement des certificats dans un précédent article.

Le code que nous venons de montrer fonctionne pour autant que le certificat de
VirtualHub soit valide. Si VirtualHub utilise un certificat auto-signé la communication ne peut pas être établie, car la librairie PHP ne connaît pas ce certificat.

Dans ce cas il y a deux solutions: contourner la vérification du certificat ou l'installer.

Contourner la vérification du certificat


La vérification du certificat du serveur est indispensable pour garantie une communication 100% sécurisée, mais nous avons quand même ajouté une méthode qui permet de désactiver partiellement ou complètement cette fonctionnalité.

La méthode YAPI::SetNetworkSecurityOptions permet de désactiver certains checks de sécurité.

  • NO_TRUSTED_CA_CHECK: Désactive la vérification des certificats.
  • NO_HOSTNAME_CHECK: Désactive la vérification du hostname


Le code suivant désactive toutes les vérifications des certificats TLS.

YAPI::SetNetworkSecurityOptions( YAPI::NO_HOSTNAME_CHECK | YAPI::NO_TRUSTED_CA_CHECK);



Installer le certificat


Afin de permettre une véritable authentification, il faut installer le certificat auto-signé du VirtualHub distant.

La première étape est d'obtenir le certificat public de VirtualHub. La solution la plus simple de se connecter à l'interface web de VirtualHub avec un browser et de sauvegarder le certificat. La plus pars des browsers permettent de sauver le certificat au format PEM.

Par exemple, sous Firefox, il faut cliquer sur le cadenas à côté de l'URL pour accéder au détail de la connexion et ensuite afficher le certificat. Depuis là il est possible de télécharger le certificat.

Sous Firefox, il est possible de sauvegarder le certificat en cliquant sur le cadenas
Sous Firefox, il est possible de sauvegarder le certificat en cliquant sur le cadenas




L'autre option est d’utiliser notre librairie PHP et la méthode YAPI::DownloadHostCertificate. Cette méthode établit une connexion avec l'host passé en argument et retourne le certificat distant.

Par exemple, le code suivant stocke dans le fichier vhub_example_com.pem le certificat de VirtualHub for Web installé sur le serveur https://vhub.example.com.

...
$host = "https://vhub.example.com";
$remote_cert = YAPI::DownloadHostCertificate(host, 5000);
file_put_contents("vhub_example_com.pem",$remote_cert);
...



Une fois que le certificat est stocké sur le disque, on peut soit modifier la configuration de PHP pour qu'il reconnaisse automatiquement ce certificat, ou utiliser la méthode YAPI::SetTrustedCertificatesList.

La méthode YAPI::SetTrustedCertificatesList permet de spécifier la liste de certificats de confiance. Cette méthode prend en paramètre le path d'un fichier contenant tous les certificats au format PEM.

$error = YAPI::SetTrustedCertificatesList("vhub_example_com.pem");
if ($error !="") {
    die($error);
}
if (YAPI::RegisterHub("wss://vhub.example.com", $errmsg) != YAPI_SUCCESS) {
    die("YAPI::RegisterHub failed: ". $errmsg);
}
...




Notez que pour des raisons techniques, il n'est possible de spécifier qu'un seul fichier. Donc si vous devez vous connecter à plusieurs VirtualHub avec des certificats auto-signé, il faudra utiliser un seul fichier qui contient les deux certificats mis bout à bout.

...
$remote_cert1 = YAPI::DownloadHostCertificate("https://vhub1.example.com", 5000);
$remote_cert2 = YAPI::DownloadHostCertificate("https://vhub2.example.com", 5000);
file_put_contents("allcert.pem",$$remote_cert1.$remote_cert2);
...



Conclusion


En résumé, notre librairie PHP supporte les connexions sécurisées avec VirtualHub. Il vous suffit d'ajouter le préfixe "https://" à l'adresse du VirtualHub lors de l'appel à YAPI::RegisterHub pour activer cette fonctionnalité.

Cependant, si VirtualHub utilise un certificat auto-signé, n'oubliez pas d'installer le certificat sur votre système.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.