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?
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? –
'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
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) –