2010-04-23 11 views
5

J'ai un doute très basique dans SSL HandShake. Supposons que nous ayons un serveur S qui utilise des certificats auto-signés. J'écris un client Java C qui se connecte au S. Lorsque C se connecte à S, C obtient des certificats de S et les enregistre dans son fichier de clés certifiées et la partie restante de la communication continue. Après un certain temps, j'utilise le même C pour me connecter au S, donc S enverra à nouveau les certificats à C, ou C utilisera les certificats déjà stockés dans le fichier de confiance. Je ne suis pas bon dans SSL et la mise en œuvre sous-jacente de la fonctionnalité Truststore en Java. Est-ce que S enverra les certificats à C invariable de savoir si le C a des certificats sur son truststore ?? Je crois que si j'ai des certificats dans le truststore C confiances S et C ne demandera pas de certificats quand je me reconnecte ?? Est-ce que ma supposition est juste?SSL HandShake sur le client Java

Le processus est-il le même pour les certificats auto-signés et les certificats CA?

Merci d'avance.

+1

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

Répondre

6

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.

+0

C'est plutôt bien.La capacité de reprise n'est pas liée aux connexions; il s'agit simplement d'une certaine durée de vie de la session, généralement cinq minutes, au cours de laquelle de nouvelles connexions SSL entre les mêmes homologues SSL peuvent réutiliser le secret principal généré au début. –

+0

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

+1

Je ne pense pas qu'il y ait une différence dans la façon dont ils sont traités, mais il pourrait y avoir des différences dans les certificats eux-mêmes. Peut-être que la taille de clé utilisée dans le certificat auto-signé est plus courte que les certificats CA? Les certificats d'autorité de certification peuvent avoir une longue chaîne de certificats. Par conséquent, pour vérifier le certificat client, il doit parcourir une liste plus longue de certificats approuvés. Il y a des façons de regarder ces choses en utilisant openssl je pense. – DaveJohnston