SSLContext initialisation
Je suis à la recherche à la JSSE
guide de référence, j'ai besoin de pour obtenir une instance de SSLContext
afin de créer un SSLEngine
donc je peux l'utiliser avec Netty
pour activer la sécurité.
Pour obtenir une instance de SSLContext
j'utilise SSLContext.getInstance()
. Je vois que la méthode est substituée à plusieurs reprises, je ne peux donc choisi le protocole et le fournisseur de services de sécurité à utiliser.
IciJe peux voir la liste des algorithmes qui peuvent être utilisés. L'algorithme doit-je utiliser pour sécuriser la communication?
Aussi, car il est possible de spécifier le fournisseur de sécurité pour l'utilisation, le fournisseur qui dois-je utiliser?
Grâce
source d'informationauteur Mickael Marrache
Vous devez vous connecter pour publier un commentaire.
Comme vous pouvez le voir dans la des noms standard de la documentationtoutes les entrées (SSLv3, TLSv1.0, TLSv1.1, ...) disent qu'ils peuvent soutenir les autres versions.
Dans la pratique, dans l'Oracle JDK (et OpenJDK), elles le sont toutes. Si vous regardez la le code sourcele
TLS10Context
classe est ce qui est utilisé pour le protocole TLS, SSL, SSLv3 et TLS10,TLS11Context
est utilisé pour TLSv1.1 etTLS12Context
pour TLSv1.2. Tous en charge toutes les versions de SSL/TLS, il est ce qui est activée par défaut qui varie.Cela peut être différent avec un autre fournisseur ou JRE vendeur. Il convient évidemment d'en choisir un qui est au moins va soutenir la version de protocole que vous souhaitez utiliser.
Noter que le protocole utilisé est déterminé plus tard sur l'utilisation de
SSLSocket.setEnabledProtocols(...)
ou de sesSSLEngine
équivalent.En règle générale, utilisez la version la plus récente numéro, vous pouvez (SSLv3 < TLSv1.0 < TLSv1.1 ...), qui peuvent dépendre de ce que les parties avec lesquelles vous souhaitez communiquer de soutien.
Dont les protocoles sont activés par défaut varie en fonction de la version exacte de l'Oracle JRE.
Lorsque l'on regarde le code source pour
sun.de sécurité.le protocole ssl.SunJSSE
dans OpenJDK 7u40-b43TLS
est tout simplement un alias pourTLSv1
(et sont doncSSL
etSSLv3
), en termes deSSLContext
protocoles. En regardant les différents les implémentations deSSLContextImpl
(qui sont les classes internes deSSLContextImpl
lui-même):TLS10Context
(utilisé pour le protocoleSSL
SSLv3
TLS
TLSv1
) permet de SSLv3 de TLSv1.0 par défaut sur le côté client.TLS11Context
(utilisé pour le protocoleTLSv1.1
) permet également de TLSv1.1 par défaut.TLS12Context
(utilisé pour le protocoleTLSv1.2
) permet également de TLSv1.2 par défaut.Cette évolution de Java 8, en collaboration avec la nouvelle
jdk.tls.client.les protocoles
système de la propriété.Encore une fois, quand on regarde le code source pour
sun.de sécurité.le protocole ssl.SunJSSE
dans OpenJDK 8u40-b25SSLContext
protocolesTLSv1
TLSv1.1
etTLSv1.2
également faire usage deTLS10Context
TLS11Context
etTLS12Context
qui suivent la même logique que dans Java 7.Toutefois, le protocole
TLS
n'est plus un alias pour l'un d'eux. Au contraire, il utiliseTLSContext
qui s'appuie sur les valeurs de lajdk.tls.client.protocols
propriétés du système. À partir de la JSSE guide de Référence:Si cette propriété est vide, tous les protocoles sont activés par défaut sur le client et côté serveur.
Bien sûr, dans les dernières versions d'Oracle JRE 8, SSL est également complètement désactivé par défaut (si éloignée de ces listes).
Noter que dans les deux cas (JRE 7 et 8), la
SSLContext
vous obtenez par défaut viaSSLContext.getDefault()
de la boîte est plus ou moins équivalent à unSSLContext
obtenus avec le protocoleTLS
et initialisée avec la valeur par défaut truststore paramètres et ainsi de suite.Il n'y a pas de valeur par défaut pour le protocole, je voudrais donc utiliser la plus récente prise en charge par votre JDK, qui est soit TLSv1, TLSv1.1 ou TLSv1.2: voir ce qui fonctionne, ou jeter un oeil à
getSupportedProtocols()
. Le fournisseur de sécurité par défaut est utilisé en évitant tous les APIs où vous le préciser, ou autre par exempleKeyStore.getDefaultType()
.Et quand vous venez d'obtenir votre SSLEngines, assurez-vous d'utiliser la méthode qui prend un nom d'hôte et le port. Sinon, vous n'aurez pas de session SSL partage.