C'est ma compréhension de SSL, je ne suis pas un expert en la matière, mais en l'absence d'autres réponses j'espère pouvoir au moins vous donner quelques choses à penser. Lorsque vous créez un certificat auto-signé pour le serveur, vous devez l'ajouter au client, il ne s'installe pas dès que le client se connecte, sinon tout serveur peut être sécurisé en envoyant un certificat auto-signé à tout ce qui essaie de s'y connecter. Dans mon application, le certificat du serveur est chargé dans le fichier de clés certifiées du client lorsqu'il est démarré en spécifiant javax.net.ssl.truststore ("path/to/server/cert");
Maintenant, lorsque le client se connecte au serveur, la prise de contact a lieu. À ce stade, le serveur enverra son certificat au client et le client confirmera qu'il vient en fait du serveur en le vérifiant par rapport à son fichier de clés certifiées (à ce stade, peu importe s'il est auto-signé ou non, parce que le client devrait vérifier les certificats de racine aussi bien que vous avez ajouté). Si le certificat envoyé par le serveur extrait la communication continue et les données sont partagées.
Il existe une forme de session qui permet à la communication de se poursuivre sans avoir à échanger des certificats à chaque fois. Mais je crois que ceci est limité à la connexion unique, donc dès que vous fermez la connexion et en créez une nouvelle, le processus doit être répété, c'est-à-dire que le serveur doit envoyer à nouveau son certificat pour validation. Donc, en résumé: le certificat de serveur auto-signé doit être installé sur le client en dehors de la communication SSL (comme la façon dont les certificats CA racine sont installés dans un produit depuis le début). Chaque connexion SSL établie entre le client et le serveur nécessite que le serveur envoie son certificat au client afin qu'il puisse le vérifier par rapport à son fichier de clés certifiées.
Il est possible que le serveur permette la reprise des sessions, auquel cas le certificat ne sera pas renvoyé (mais je ne sais pas dans quelles conditions une session peut être reprise, peut-être configurable sur différents serveurs) .
Espérons que cela vous donne au moins quelque chose à penser.
J'ai écrit un simulateur https en Java. J'ai été capable de simuler 12 000 - 15 000 demandes en 15 secondes en utilisant des certificats auto-signés. Mais cela prend 3 minutes en utilisant des certificats CA? Je ne comprends vraiment pas pourquoi cela se produit. Y at-il une différence subtile dans le traitement des certificats auto-signés par rapport aux certificats de CA? – JKV