PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Lire la date d'expiration d'un certificat SSL
Lire la date d'expiration d'un certificat SSL
Débuté par Simon, 28 avr. 2021 15:54 - 14 réponses
Membre enregistré
16 messages
Popularité : +3 (3 votes)
Posté le 28 avril 2021 - 15:54
Bonjour,

J'aurais voulu savoir s'il était possible de récupérer les informations sur le certificat SSL lors d'une HTTPRequête, notamment la date d'expiration et l'organisme fournisseur.

Le but est de pouvoir automatiser la surveillance de tout un set de domaines pour mieux anticiper les expirations.

Merci
Membre enregistré
3 846 messages
Popularité : +227 (347 votes)
Posté le 28 avril 2021 - 16:45
Bonjour,
Il faut utiliser une variable de type Certificat https://doc.pcsoft.fr/fr-fr/?1000019287&name=certificat_type_variable

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
16 messages
Popularité : +3 (3 votes)
Posté le 03 mai 2021 - 16:27
Bonjour,

Merci pour votre réponse, mais si je comprends bien la doc, ces fonctions servent à lire un certificat d'un poste local, pas le certificat lié à une connexion SSL vers un site externe.

Plus simplement, je cherche à obtenir les mêmes informations que lorsqu'on utilise un navigateur pour aller sur un site internet, et qu'on affiche les informations du certificat de ce site en cliquant sur le verrou à côté de l'URL.
Membre enregistré
309 messages
Popularité : +31 (37 votes)
Posté le 03 mai 2021 - 17:45
Bonjour,
Je ne crois pas qu'il existe de fonctions windev pour le certificat distant.
Vous pouvez éventuellement passer par un script powershell qui .

- récupère le certificat
- lit les informations
- enregistre les informations dans un fichier texte
- puis ouvrir ce fichier texte et le lire depuis windev

le script suivant effectue cela par exemple pour google.fr :
(à copier coller dans une fenêtre powershell ou enregistrer dans un fichier avec extension .ps1)

$tcpclient = new-object System.Net.Sockets.tcpclient
$hostname = 'www.google.fr'
$port=443
$tcpclient.Connect($hostname,$port)
$cert = $null

$sslstream = new-object System.Net.Security.SslStream -ArgumentList $tcpclient.GetStream(),$false, {$true}

$sslstream.AuthenticateAsClient($hostname)
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]($sslstream.remotecertificate)

$cert | fl subject,*not*,Thumb*,ser* > c:\temp\test.txt



Bon dev.
Membre enregistré
16 messages
Popularité : +3 (3 votes)
Posté le 10 mai 2021 - 17:25
Passer par un script PowerShell, c'est pas l'idéal ... mais ça fait bien le taf :)

Problème résolu. Merci pour votre aide !
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 12 mai 2021 - 17:28
Bonjour
vu que windev peut integrer du c# vous pouvez le coder directement
1) A mettre dans le fichier CertificatSsl.cs et à importer dans le projet comme "Autre"
using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Security.Authentication;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.IO;

namespace CERTIFICATSSL
{
PUBLIC static class Certificat
{
PRIVATE static string infos;

PUBLIC static string GetSslCertificateInfos(string strDNSEntry)
{
infos = "NO ERROR";
X509Certificate2 cert = Null;
using (TcpClient client = new TcpClient())
{
client.Connect(strDNSEntry, 443);
SslStream ssl = new SslStream(client.GetStream(), False, new RemoteCertificateValidationCallback(ValidateServerCertificate), Null);
try
{
ssl.AuthenticateAsClient(strDNSEntry);
}
catch (AuthenticationException e)
{
infos = e.Message;
ssl.Close();
client.Close();
RETURN infos;
}
catch (EXCEPTION e)
{
infos = e.Message;
ssl.Close();
client.Close();
RETURN infos;
}
cert = new X509Certificate2(ssl.RemoteCertificate);

infos = string.Format("Valid Date: {0}{1}", cert.NotBefore, Environment.NewLine);
infos += string.Format("Expiry Date: {0}{1}", cert.NotAfter, Environment.NewLine);
ssl.Close();
client.Close();
RETURN infos;
}
}


PUBLIC static bool ValidateServerCertificate(object sender, X509Certificate Certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
IF (sslPolicyErrors == SslPolicyErrors.None)
RETURN True;

infos = string.Format("Certificate error: {0}", sslPolicyErrors);
RETURN False;
}
}
}


2) Fonction C# servant d'appel
PUBLIC static string getDateCerticatSsl(string ServeurName)
{
RETURN Certificat.GetSslCertificateInfos(ServeurName);
}


3) Utilisation en wlangage
[code:wl]
Trace(getDateCerticatSsl("www.google.com"))
[/code
Donne :
Valid Date: 13/04/2021 10:17:32
Expiry Date: 06/07/2021 10:17:31

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
286 messages
Popularité : +24 (28 votes)
Posté le 13 mai 2021 - 18:13
Bonsoir Philippe,
La commande "à importer dans le projet comme "Autre" n'est pas accessible via WD24
Je suppose qu'il faut disposer d'une version WD25 ou supérieur ?
Bien Cordialement
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 13 mai 2021 - 19:59
bonjour
si ca existe en V24




--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 13 mai 2021 - 20:09
petit oubli "clic droit" dessus "Autres" et choisir le fichier
Membre enregistré
286 messages
Popularité : +24 (28 votes)
Posté le 14 mai 2021 - 07:50
Bonjour Philippe
Merci pour ton aide :-)
Bien cordialement
Membre enregistré
286 messages
Popularité : +24 (28 votes)
Posté le 14 mai 2021 - 08:20
Bonjour Philippe
Après ajout et compilation lors du test WD génère l'erreur suivante :






C'est assez étrange ...
Bien Cordialement
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 14 mai 2021 - 15:38
bonjour
avez vous bien <public static class Certificat> dans le fichier source (je crois que c'est case sensitif)

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 14 mai 2021 - 17:36
avez vous copiez la dll générée par la compilation
<repertoire de l'exe>\<Nom du projet>.dll
dans "C:\Program Files (x86)\PC SOFT\WINDEV24\Programmes\Framework\Win64x86\"

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
286 messages
Popularité : +24 (28 votes)
Posté le 14 mai 2021 - 18:11
Bonsoir Philippe

J'ai fait un copier coller du code ;-)

WD ne me génère pas de dll car il y a une erreur de compilation
"Le nom 'Certificat' n'existe pas dans le contexte actuel" ;-)

Je suis en WD et n'est pas en WB, je pense que le problème vient de là :-)

Le but étant d'essayer d'importer une classe C# dans WD ;-)

Bien Cordialement
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 14 mai 2021 - 19:19
je suis en windev24 pas en webdev

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer