2016-09-30 2 views
3

Il y a quelques informations utiles disponibles sur la mise en œuvre du SSL avec NIO (SocketChannel and SSLEngine) en utilisant java, ne pas utiliser un cadre tel que Netty etc.sécurité Thread avec SSL + NIO

Je suis en train de trouver une mise en œuvre SSL qui pourrait fonctionner avec blocking/non canaux de blocage et a obtenu quelques qns de base.

Il n'y a pas beaucoup d'informations sur les problèmes à traiter avec la sécurité des threads, lorsque les tampons appData et Net sont manipulés. Par la documentation de SSLEngine,

« Il y a deux problèmes de concurrence à connaître:.

Les méthodes wrap() et unwrap() peuvent exécuter simultanément les uns des autres

Les SSL/TLS protocoles emploient des paquets commandés applications doivent. veillez à ce que les paquets générés soient distribués en séquence.Si des paquets arrivent hors service, des résultats inattendus ou fatals peuvent se produire. "

Serait-ce applicable à la fois au blocage et au non-blocage? Quelqu'un pourrait-il expliquer? Merci.

En outre, la recommandation générale pour l'établissement des tailles de tampon initial semble basée sur (session.getApplicationBufferSize()/getPacketBufferSize()), comment ces valeurs seraient-elles définies? Sont-ils mieux à utiliser à la place d'une taille de tampon standard de 32k ou plus?

Répondre

1
  1. Vous ne procéderez normalement pas à des opérations SSLEngine dans plusieurs threads, de sorte que la question ne devrait pas se poser. La seule fois où vous utiliseriez un autre thread serait lors de l'exécution des tâches SSLEngine, et cela n'utilise pas le SSLEngine.

Serait-ce applicable à la fois au blocage et au non-blocage?

  1. Oui, bien sûr.

la recommandation générale pour la mise en place des tailles de tampon initial semble reposer de (session.getApplicationBufferSize()/getPacketBufferSize()), comment ces valeurs sont définies?

  1. Définir votre réseau tampon tailles à getPacketBufferSize(), et vos tailles de tampon d'application à getApplicationBufferSize().

sont-elles mieux être utilisé à la place d'une taille de tampon standard de 32k ou plus?

  1. Vous pouvez utiliser différentes tailles de tampon si vous le souhaitez, mais pourquoi? Vous courez le risque soit de gaspiller de l'espace avec des tampons trop grands, soit de fournir des tampons trop petits pour être utilisables.
+0

Merci @EJP. Comme d'habitude, vos commentaires sur ce sujet sont très utiles. Pourriez-vous pls.Élaborer sur le problème de concurrence possible mentionné, comme d'habitude je ne vois pas, ceux-ci étant traités explicitement: "Les méthodes wrap() et unwrap() peuvent s'exécuter concurremment les uns des autres Les protocoles SSL/TLS emploient des paquets ordonnés. doit veiller à ce que les paquets générés soient livrés en séquence.Si des paquets arrivent dans le désordre, des résultats inattendus ou fatals peuvent se produire. " Cela devrait-il être géré explicitement dans le client instanciant le SSLEngine? –

+0

'Peut s'exécuter simultanément' signifie que * vous * pouvez les exécuter simultanément. Si vous n'utilisez qu'un seul thread, qui est le point entier de NIO, il n'y a pas de problème de séquence de paquets à gérer. – EJP

+0

Final Clarification Pls. (Espérons-le), Encore une fois dans la documentation de SSLEngine: "En séparant l'abstraction SSL/TLS du mécanisme de transport E/S, le SSLEngine peut être utilisé pour une grande variété de types d'E/S. E/S (interrogation), E/S non bloquantes sélectionnables, Socket et les traditionnels Input/OutputStreams, ByteBuffers locaux ou tableaux d'octets, ... "Cela signifie-t-il que SSLEngine pourrait être utilisé dans un transport autre que NIO? SSLSocket ne devait pas être utilisé pour SSL avec un IO de blocage basé sur socket standard et SSLEngine pour NIO (blocage IO) –