Delphi est un langage de programmation un peu désuet, mais qui est encore activement utilisé par plusieurs de nos clients. C'est pour cette raison que, cette semaine, nous publions une mise à jour de notre librairie pour qu'elle supporte notre API en version 2.0.
La principale nouveauté de l'API 2.0 est l'ajout du chiffrage de la communication à l'aide de TLS. Notez que le chiffrement des communications n'est actuellement supporté que par VirtualHub v2.0, VirtualHub for Web et GatewayHub.
Pour utiliser une connexion sécurisée, il suffit d'ajouter le préfixe "secure://" à l'adresse de VirtualHub lors de l'appel à YAPI.RegisterHub. Le préfixe "secure://" force la libraire à établir une connexion chiffrée. Si la librairie essaie de se connecter à un hub qui ne supporte pas le chiffrement des données, l'appel retournera une erreur.
if yRegisterHub('secure://vhub.example.com', errmsg) <> YAPI_SUCCESS then
begin
Write('RegisterHub error: '+errmsg);
exit;
end;
...
Le préfixe "secure://" essaie de se connecter en priorité à l'aide du protocole "WebSocket Secure" et effectue un fallback sur HTTPS s'il n'est pas disponible (par exemple VirtualHub for Web). Si vous voulez forcer un type particulier de connexion, vous pouvez utiliser les préfixes "https://" et "wss://".
La gestion des certificats
Qui dit chiffrement TLS, dit gestion des certificats. Nous avons déjà expliqué dans un précédent article les différents types de certificats. Nous allons simplement lister les fonctions de nos librairies qui permettent de gérer les certificats inconnus.
yAddTrustedCertificates
La fontion yAddTrustedCertificates permet d'ajouter des certificats à la liste de certificats de confiance. Cette fonction prend en paramètre une chaîne de caractères qui contient un ou plusieurs certificats au format PEM.
CA_PEM: string;
error: string;
...
CA_PEM :=
'-----BEGIN CERTIFICATE-----'+#10+
'MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB'+#10+
'iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl'+#10+
'cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV'+#10+
'BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw'+#10+
...
'qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB'+#10+
'VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB'+#10+
'L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG'+#10+
'jjxDah2nGN59PRbxYvnKkKj9'+#10+
'-----END CERTIFICATE-----'+#10;
error := yAddTrustedCertificates(CA_PEM);
if error <> '' then
begin
Writeln(error);
exit;
end;
yRegisterHub('secure://vhub.example.com');
...
yDownloadHostCertificate
La fonction yDownloadHostCertificate permet de télécharger le certificat d'un serveur. Cette méthode est pratique pour obtenir le certificat d'un VirtualHub dont le certificat n'est pas encore connu. Attention, cette méthode bypasse la validation SSL/TLS, assurez-vous que votre réseau et votre machine ne soient pas corrompus lors de l'exécution.
Le code suivant cherche sur le disque dur si nous avons déjà le certificat pour ce VirtualHub. Si c'est le cas, on le charge du disque et on l'ajoute à la liste des certificats de confiance. Si c'est la première fois qu'on accède à ce VirtualHub, on afficher un message d'avertissement à l'utilisateur pour lui demander s’il faut télécharger et sauver le certificat de ce nouveau VirtualHub. En cas de réponse positive, on peut utiliser la méthode yDownloadHostCertificate pour obtenir le certificat au format PEM et le sauver sur le disque.
host: string;
trusted_cert: string;
...
host := 'secure://vhub.example.com';
trusted_cert := load_cert_from_fs(host);
if trusted_cert = '' then
begin
// no certificate for host on file system
if warn_and_ask_user() then
begin
trusted_cert := yDownloadHostCertificate(host, 5000);
save_cert_to_fs(host, trusted_cert);
end;
error := yAddTrustedCertificates(trusted_cert);
if error <> '' then
Write(error);
exit();
}
yRegisterHub(host, errmsg);
...
ySetNetworkSecurityOptions
La méthode ySetNetworkSecurityOptions permet de désactiver certains checks de sécurité.
- Y_NO_TRUSTED_CA_CHECK: Désactive la vérification des certificats.
- Y_NO_EXPIRATION_CHECK: Désactive la vérification de la date d'expiration d'un certificat.
- Y_NO_HOSTNAME_CHECK: Désactive la vérification du hostname
Le code suivant désactive toutes les vérifications des certificats TLS.
Conclusion
Comme d'habitude, cette librairie est disponible sur notre site Web ou sur GitHub.
Malgré le changement de version majeur, cette nouvelle version de la librairie est backward compatible avec l'API 1.10. Et si vous vous demandez pourquoi nous avons sauté la version 2.0 et passé directement à 2.1 vous pouvez consulter cet article.