💾 Archived View for gemlog.lanterne.chilliet.eu › 2021-01-02%20Versions-de-TLS.gmi captured on 2024-08-31 at 11:41:18. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2021-11-30)

-=-=-=-=-=-=-

Versions de TLS supportées par PHP

Comme indiqué dans le précédent billet, il a été signalé sur la liste de diffusion Gemini que des serveurs acceptaient des versions obsolètes de TLS alors que c’est interdit par la norme Gemini, qui dit TLS 1.3 obligatoire et TLS 1.2 optionnel.

J’étais un peu embêté parce que la docummentation PHP au sujet du support TLS pour les streams est assez incomplète. Je dois indiquer quelle version de TLS je souhaite utiliser en indiquant soit la constante STREAM_CRYPTO_METHOD_TLS_SERVER pour accepter toutes les versions de TLS, soit un "ou" logique entre plusieurs constantes plus précises, comme STREAM_CRYPTO_METHOD_TLSv1_2_SERVER par exemple pour 1.2. Le problème c’est que la documentation ne mentionne pas STREAM_CRYPTO_METHOD_TLSv1_3_SERVER, et si j’indique TLS 1.2 en dur je suis certain que le serveur n’acceptera pas 1.3. En fouillant le code je trouve bien la constante pour 1.3, mais comme elle n’est pas documentée difficile de savoir dans quelle version de PHP elle a été ajoutée et donc sur quelle version de PHP mon code marchera si je l’utilise.

Heureusement un utilisateur de la liste de diffusion a trouvé une solution élégante : faire les choses dans l’autre sens, partir de la constante pour toutes les versions et en retirer les vieilles versions avec un NAND, ce qui donne STREAM_CRYPTO_METHOD_TLS_SERVER & ~STREAM_CRYPTO_METHOD_TLSv1_0_SERVER & ~STREAM_CRYPTO_METHOD_TLSv1_1_SERVER. Ça semble être une solution satisfaisante, qui fonctionne avec toutes les versions de PHP, et qui permet d’autoriser une hypothétique future version 1.4 sans toucher au code. C’est ce qui est maintenant en production sur ce serveur.