De temps à autre, les utilisateurs et les administrateurs de Windows se demandent pourquoi l’heure et la date de leurs systèmes changent soudainement et a plusieurs semaines, mois ou années d’avance ou de retard.
À quoi est-ce dû ? Les journalistes de Ars Technica ont fait quelques recherches et ont découvert que ça pourrait être lié à la fonctionnalité Secure Time Seeding. Dans cet article, je vous explique le fonctionnement de cette option et ce que vous pouvez faire pour éviter ces sauts dans le temps.
Qu’est-ce que Secure Time Seeding ?
La fonctionnalité Secure Time Seeding est apparue dans Windows 10 en 2015. Cette option a pour but de corriger les différences entre l’heure du système et l’heure réelle, principalement lorsque la batterie de l’ordinateur qui alimente l’horloge temps réel interne meurt et que les paramètres relatifs au temps n’ont aucun lien avec la réalité. Plus important encore, STS peut corriger l’heure du système sans accéder aux serveurs de l’heure actuelle.
Pourquoi cette correction des différences temporelles est-elle nécessaire ? Curieusement, c’est pour des raisons de sécurité. En général, des protocoles de chiffrement SSL/TLS protègent l’échange de données client-serveur (dont la connexion du système aux serveurs de temps d’Internet). Pour établir cette connexion avec le serveur, le client doit d’abord vérifier son certificat numérique, et ces certificats ne sont valables que pendant un certain temps. Ainsi, si l’heure indiquée par le système présente une grosse erreur, le certificat pourrait apparaître comme expiré et la connexion sécurisée pourrait ne pas être établie.
C’est un cercle vicieux : pour obtenir l’heure exacte, l’ordinateur doit connaître l’heure actuelle. Il ne faut pas forcément que ce soit exactement la même puisqu’une heure similaire pourrait fonctionner. Plus l’heure du système diffère de l’heure actuelle, plus il y a de chance que le certificat soit indiqué comme expiré.
STS apporte (du moins selon ses développeurs) une solution pour que le système identifie et corrige automatiquement les différences les plus importantes, et ce même lorsqu’une connexion sécurisée ne peut pas être établie avec le serveur. Cela est possible grâce aux horodatages actuels et aux dates d’expiration des certificats numériques qui se trouvent dans les données envoyées par les serveurs au client lorsqu’une connexion sécurisée est établie pour la première fois (les prises de contact SSL et TLS).
Nous ne connaissons pas l’algorithme exact de STS. L’idée globale est que Windows obtient les données de la prise de contact SSL et s’en sert pour calculer une plage d’heure actuelle fiable puis pour lui attribuer une probabilité. Lorsque de nouvelle données sont disponibles, la plage est mise à jour et la probabilité peut augmenter progressivement. Lorsqu’elle atteint un certain seuil, STS décide de changer l’heure du système à l’heure moyenne de la plage qu’il considère comme fiable. En théorie, cette précision devrait être suffisante pour établir une connexion sécurisée, pour se connecter à un serveur temps réel et pour obtenir l’heure exacte.
Pourquoi devriez-vous désactiver Secure Time Seeding ?
Le problème principal est que la fonctionnalité est active par défaut sous Windows 10 et fonctionne même si l’horloge intégrée de l’ordinateur n’a jamais été désynchronisée. Ainsi, STS peut rétablir l’heure à n’importe quel moment lorsque l’algorithme secret de Microsoft décide que suffisamment de signaux indiquent que l’horloge indique la mauvaise erreur et doit être corrigée.
Nous ne savons pas exactement pourquoi Secure Time Seeding ne fonctionne pas bien. L’une des causes pourrait être la hausse significative de la popularité des outils SSL/TLS qui envoient un horodatage erroné lors de la prise de contact. La bibliothèque OpenSSL est souvent utilisée et est la principale suspecte puisqu’elle introduirait des valeurs choisies au hasard dans l’horodatage au lieu de l’heure actuelle du serveur.
De plus, ce bug peut aussi se produire dans les versions pour serveurs Windows Server 2016, Windows Server 2019 et Windows Server 2022 du système d’exploitation. Alors que ce problème n’est qu’un petit inconvénient pour les utilisateurs d’ordinateurs, il peut être catastrophique pour les serveurs puisque leur bon fonctionnement dépend généralement du fait d’avoir l’heure exacte.
Un employé avec beaucoup d’ancienneté du service technique officiel de Microsoft a donné un conseil non officiel à ce propos aux administrateurs de contrôleurs de domaine Active Directory :
« Salut ! Si vous gérez des contrôleurs de domaine Active Directory, j’aimerai vous donner un conseil INFORMEL qui n’est autre que mon opinion personnelle : désactivez Secure Time Seeding pour w32time sur vos CDs. »
Comment désactiver Secure Time Seeding dans Windows
Pour désactiver STS, vous devez trouver cette clé dans le registre de Windows :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
Définissez la valeur de configuration du Registre UtilizeSSLTimeData sur 0 :
Vous pouvez aussi exécuter l’ordre suivant comme administrateur via l’invite de commandes de Windows (CMD) :
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v UtilizeSslTimeData /t REG_DWORD /d 0 /f
Vous devez redémarrer le système après avoir modifié la valeur. Si cela s’avère compliqué ou impossible, vous pouvez forcer la mise à jour grâce à la commande suivante :
W32tm.exe /config /update
La fonctionnalité STS ne devrait plus bugger après ces changements. Il ne vous reste plus qu’à vous assurer que l’horloge du système est toujours à l’heure. Sur ce point, l’article publié par Ars Technica donne quelques conseils pratiques aux administrateurs de serveurs.