RFR: 8331682: Slow networks/Impatient clients can potentially send unencrypted TLSv1.3 alerts that won't parse on the server [v17]
Artur Barashev
abarashev at openjdk.org
Wed Oct 9 20:04:16 UTC 2024
On Wed, 9 Oct 2024 07:47:38 GMT, Daniel Jeliński <djelinski at openjdk.org> wrote:
>> Artur Barashev has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Return null if there is no record we attempted to decode
>
> test/jdk/javax/net/ssl/TLSv13/SSLSocketNoServerHelloClientShutdown.java line 122:
>
>> 120: SSLEngineResult clientResult;
>> 121: // Client-side plain TCP socket.
>> 122: clientSocket = new Socket("localhost", port);
>
> if you use a SocketChannel instead, you'll be able to deal with ByteBuffers directly instead of going through byte arrays.
Good idea, done!
> test/jdk/javax/net/ssl/TLSv13/SSLSocketNoServerHelloClientShutdown.java line 134:
>
>> 132:
>> 133: // Send client_hello, read and store all available messages from the server.
>> 134: while (delayed.size() < 6) {
>
> Could you drop the delayed queue, and instead send user_canceled/close_notify before you start reading from the socket? It would simplify the code and improve the coverage.
Indeed, done!
> test/jdk/javax/net/ssl/TLSv13/SSLSocketNoServerHelloClientShutdown.java line 162:
>
>> 160: // Send user_canceled and close_notify alerts to server. Server should process
>> 161: // 2 unencrypted alerts and send its own close_notify alert back to the client.
>> 162: ByteBuffer serverCloseNotify = clientWriteRead();
>
> Make sure to read until EOF
Done
> test/jdk/javax/net/ssl/TLSv13/SSLSocketNoServerHelloClientShutdown.java line 196:
>
>> 194: }
>> 195:
>> 196: protected ByteBuffer clientWriteRead() throws IOException {
>
> could you split the write and read methods?
Done
> test/jdk/javax/net/ssl/TLSv13/SSLSocketNoServerHelloClientShutdown.java line 204:
>
>> 202: inspectTlsBuffer(cTOs);
>> 203:
>> 204: byte[] outbound = new byte[cTOs.limit() - cTOs.position()];
>
> limit() - position() is equivalent to remaining()
Indeed, but this code is gone now.
> test/jdk/javax/net/ssl/TLSv13/SSLSocketNoServerHelloClientShutdown.java line 215:
>
>> 213:
>> 214: try {
>> 215: len = is.read(inbound);
>
> this method might return a partial TLS record or multiple records. SSLEngine expects to receive the entire record in one buffer.
Reading until the EOF now
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21043#discussion_r1794153103
PR Review Comment: https://git.openjdk.org/jdk/pull/21043#discussion_r1794153406
PR Review Comment: https://git.openjdk.org/jdk/pull/21043#discussion_r1794153565
PR Review Comment: https://git.openjdk.org/jdk/pull/21043#discussion_r1794153746
PR Review Comment: https://git.openjdk.org/jdk/pull/21043#discussion_r1794154338
PR Review Comment: https://git.openjdk.org/jdk/pull/21043#discussion_r1794155144
More information about the security-dev
mailing list