Qui Suites de Chiffrement à activer pour Socket SSL?
Je suis à l'aide de Java SSLSocket pour sécuriser les communications entre un client et un serveur. Le programme serveur est également en place des requêtes HTTPS partir de navigateurs web.
Selon "Début de la Cryptographie avec Java", page 371, vous devriez toujours faire appel à setEnabledCipherSuites
sur votre SSLSocket
/SSLServerSocket
pour s'assurer que la suite de chiffrement qui finit par être négocié est suffisamment fort pour vos besoins.
Cela étant dit, un appel à mon SSLSocketFactory
's getDefaultCipherSuites
méthode donne quelques 180 options. Ces options vont de TLS_RSA_WITH_AES_256_CBC_SHA
(qui je pense est assez sécurisé) à SSL_RSA_WITH_RC4_128_MD5
(pas si sûr que c'est sûr, étant donné MD5 de l'état actuel) à SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
(pas tout à fait sûr de ce qui n').
Ce qui est raisonnable liste des suites de chiffrement pour limiter les prises de courant?
Notez que le client et le serveur ont accès à la Château Gonflable fournisseur de services, et qu'ils peuvent ou peuvent ne pas avoir illimitée de stratégie de chiffrement des fichiers installés.
TLS_RSA_WITH_AES_256_CBC_SHA
... - vous devriez probablement éviter la clé RSA de systèmes de transport (ou de les placer en bas de votre annoncé la liste). Au lieu de cela, en faveur de l'éphémère, les échanges de clé, commeDHE
, pour forward secrecy). En fait, TLS 1.3 est en train de discuter de leur retrait parce qu'ils manquent de la propriété.SSL_RSA_WITH_RC4_128_MD5
... -RC4
est le problème de l'enfant maintenant. Voir Sur la Sécurité de la RC4 en TLS et WPA. Un attaquant ne peut probablement pas se forger uneHMAC-MD5
signature dans le réseau de la 2MSL fenêtre de temps. Cependant, un attaquant peut statistiquement corrélés bits de la clef de chiffrement de flux. (Et MD5 est mort pour l'utilisation à long terme, comme les certificats et les signatures numériques).SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
... - le brûler. L'éviter comme la peste.
Vous devez vous connecter pour publier un commentaire.
Ne pas utiliser quoi que ce soit à l'exportation en elle. C'est crippleware en raison de restrictions sur l'exportation de la cryptographie forte.
EDIT: Changé pour 2009 document.
2009 NIST recommandation les listes suivantes, y compris TLS_RSA_WITH_AES_256_CBC_SHA (dont vous avez parlé):
TLS_RSA_WITH_NULL_SHA(à ne pas l'utiliser sauf si vous êtes sûr que vous n'avez pas besoin de vie privée et de la confidentialité).TLS_PSK_WITH_3DES_EDE_CBC_SHA
.TLS_RSA_WITH_AES_256_CBC_SHA
utilise une clé RSA de transport. Il devrait probablement être à l'aide deDHE
ouECDHE
pour forward secrecy).Ci-dessous est la classe Java-je utiliser pour appliquer les suites de chiffrement et de protocoles. Avant
SSLSocketFactoryEx
, j'ai été en modifiant les propriétés de laSSLSocket
lorsque j'ai eu accès à eux. La Java des gens sur un Débordement de Pile aidé avec elle, donc c'est agréable d'être en mesure de le poster ici.SSLSocketFactoryEx
préfère plus les suites de chiffrement (commeECDHE
etDHE
), et qu'il omet des faibles et blessés des suites de chiffrement (commeRC4
etMD5
). Il doit permettre aux quatre clés RSA transport algorithmes pour l'interopérabilité avec Google et Microsoft lorsque TLS 1.2 est pas disponibles. Ils sontTLS_RSA_WITH_AES_256_CBC_SHA256
,TLS_RSA_WITH_AES_256_CBC_SHA
et deux de ses amis. Si possible, vous devez supprimer leTLS_RSA_*
principaux systèmes de transport de l'.Garder de la suite de chiffrement liste aussi petite que possible. Si vous faites de la publicité tous disponible algorithmes (similaire à Flaschen de la liste), puis votre liste sera de 80+. Qui prend en hausse de 160 octets dans le
ClientHello
, et il peut causer certains appareils à l'échec parce qu'ils ont une petite, fixe la taille de la mémoire tampon pour le traitement de laClientHello
. Les appareils cassés inclure F5 et Ironport.Dans la pratique, la liste dans le code ci-dessous est couplé à 10 ou 15 suites de chiffrement, une fois que la liste est en intersection avec Java pris en charge les suites de chiffrement. Par exemple, voici la liste je reçois lors de la préparation de la connexion ou microsoft.com ou google.com avec un nombre illimité de JCE politique en place:
La liste omet faibles ou blessés algorithmes, comme RC4 et MD5. Si elles sont activées, alors vous obtiendrez probablement un Obsolète cryptographie avertissement du Navigateur à l'occasion.
La liste sera plus petit avec la valeur par défaut de la JCE de la politique parce que la politique supprime AES-256 et quelques autres. Je pense que c'est environ 7 suites de chiffrement avec la limité de la politique.
La
SSLSocketFactoryEx
classe assure également les protocoles TLS 1.0 et supérieures sont utilisés. Les clients Java avant Java 8 désactiver TLS 1.1 et 1.2.SSLContext.getInstance("TLS")
permettra également de se faufiler dansSSLv3
(même en Java 8), de sorte que des mesures doivent être prises pour l'enlever.Enfin, la classe ci-dessous est TLS 1.3 conscient, donc, il faut travailler lorsque le fournisseur met à la disposition des. Le
*_CHACHA20_POLY1305
suites de chiffrement sont préférables, si disponibles, car elles sont beaucoup plus rapide que celle de certaines suites et ils ont de meilleures propriétés de sécurité. Google a déjà roulé sur ses serveurs. Je ne suis pas sûr si Oracle fournira. OpenSSL va leur donner OpenSSL1.0.21.1.0.Vous pouvez l'utiliser comme ceci:
createSocket
de fonctions avec des arguments différents? J'ai eu une erreur becaus eof cette. Si j'ai changé le nom de l'un, je ne sais pas le code d'appel est fait pour lequel l'un d'entre eux. Deuxièmement, j'obtiens une erreur dansList<String> aa = new ArrayList<String>();
en disant: "le type de Liste n'est pas générique; il ne peut pas être parametarized avec des arguments <String>.CHACHA20
je ne vois pas où je dois appeler le Château Gonflable fournisseur dans mon code. Une autre question, je vois dans le code des algorithmes de chiffrement comme: "TLS_ECDHE_ECDSA_WITH_CHACHA20_SHA", et "TLS_ECDHE_RSA_WITH_CHACHA20_SHA", est-ce SHA256? parce que ce que je acyually besoin est CHACHA256.SSLSocketFactory
, il devait fournir toutes les méthodes de l'original n'.SSLSocketFactorEx
ne pas les fournir.import org.bouncycastle.jce.provider.BouncyCastleProvider
; dans mon fichier de classe avec le pot dans le projet et l'avant du bâtiment personnalisésslContext
inclus cette ligneSecurity.addProvider(new BouncyCastleProvider());
qui m'a aidé à obtenir les algorithmes nécessaires, mais aussi pour exclure les non-nécessaire les algorithmes ci-dessus sont bonnes explications/exemples !!