GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Support for session resumption using RFC5077 session ticket (TlsClient only) by partheinstein · Pull Request #126 · bcgit/bc-java

Conversation

@partheinstein

@partheinstein partheinstein commented Dec 23, 2015

Copy link
Copy Markdown

Obtaining a Session Ticket

C -> S: Client Hello (empty SessionTicket ext)
C <- S: Server Hello (empty SessionTicket ext)
C <- S: Certificate
C <- S: Server Hello Done
C -> S: Client Key Exchange
C -> S: ChangeCipherSpec
C -> S: Finished
C <- S: NewSessionTicket //client should store this ticket as ticketA
C <- S: ChangeCipherSpec
C <- S: Finished

Using a session ticket

C -> S: Client Hello (SessionTicket ext = ticketA; session id not set)
C <- S: Server Hello (empty SessionTicket ext)
C <- S: ChangeCipherSpec
C <- S: Finished
C -> S: ChangeCipherSpec
C -> S: Finished

For session resumption using session ids (i.e., without using session tickets), there are two methods in TlsClient and AbstractTlsPeer to allow you to store and reuse TLSSession: notifyHandshakeComplete() and getSessionToResume(). In contrast, for session resumption using session tickets, there is only one method in TLSClient called notifyNewSessionTicket(NewSessionTicket newSessionTicket) to store the session ticket given by the server. I don't see a method to use the session ticket for session resumption.

To resume a TLS session with a ticket, the RFC says:

"The client caches this ticket along with the master secret and other parameters associated with the current session. When the client wishes to resume the session, it includes the ticket in the SessionTicket extension within the ClientHello message."

Summary of changes

All class references below are in package org.bouncycastle.crypto.tls.

  • TlsClient
    • added 2 new abstract methods: NewSessionTicket getNewSessionTicket() and SecurityParameters getSecurityParameters()
    • modified notifyNewSessionTicket() method and added a parameter to pass in SecurityParameters. Note that this breaks backwards compatibility but I assume there aren't many implementations of the TLSClient interface given that BC didn't fully support session tickets. Perhaps we could refractor the session resumption stuff out in to an interface called "SessionResumable" or something like that. Need some guidance here.
  • AbstractTlsClient
    • updated to implement the new TlsClient
  • NewSessionTicket
    • added a new method to encode the ticket without the lifetime. This was added when resuming a session using a session ticket from server (I was using nginx/openssl for testing).
  • SecurityParameters
    • added a new method to copy parameters safely (to pass to the TlsClient)
  • TlsClientProtocol
    • this is where most of important changes are!
    • resume session if the TlsClient has a session ticket (in client hello)
    • notify TlsClient if the server sends a session ticket so that the client can store for later use
  • DTlsClientProtocol
    • I don't know much about DTLS. I took an initial stab at making it support session resumption but I need someone to take over.
  • TlsExtensionUtils
    • new session ticket extension
  • MockTlsClient
    • reference implementation of TlsClient that can resume sessions using tickets
  • TlsClientTest
    • shows how to use the MockTlsClient

I did system testing with nginx. No special config needed. This is what I have:

server {
listen 1443 ssl;
server_name _;

ssl_certificate     cert.pem;
ssl_certificate_key keyNoPassphrase.pem;
ssl_session_cache   shared:SSL:10m;
...

}

I didn't write any unit tests because I need a TLS server that can issue session resumption. Please do let me know if you can think of ways to unit-test my changes.

I do have pcaps but I can't attach them here without masking the IPs.

Please note that I've never contributed to BC so I don't know what the process is. Please feel free to educate me. :)

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Parthy Chandrasekaran (RD-CA) added 14 commits December 22, 2015 14:01
Parthy Chandrasekaran (RD-CA)
Added support for session resumption using RFC5077 session ticket in …
32918b3
…TLSClient
Parthy Chandrasekaran (RD-CA)
Added a constructor for MockTlsClient that takes the RFC5077 session …
fb45939
…ticket and security params
Parthy Chandrasekaran (RD-CA)
Use RFC 5077 session ticket for session resumption
2bbad37
Parthy Chandrasekaran (RD-CA)
Sample code for tls session resumption using RFC session tickets
b9a992f
Parthy Chandrasekaran (RD-CA)
Removed throws clause for the new methods for session resumption in T…
2f8a767
…lsClient
Parthy Chandrasekaran (RD-CA)
missed few things from my previous commit
31c5624
Parthy Chandrasekaran (RD-CA)
formatted code to conform to master repo
7311c30
Parthy Chandrasekaran (RD-CA)
formatted code to conform to master repo
33eb298
Parthy Chandrasekaran (RD-CA)
formatted code to conform to master repo
e31b7f6
Parthy Chandrasekaran (RD-CA)
formatted code to conform to master repo
fb7bb47
Parthy Chandrasekaran (RD-CA)
formatted code to conform to master repo
150c4c5
Parthy Chandrasekaran (RD-CA)
formatted code to conform to master repo
700c3a2
Parthy Chandrasekaran (RD-CA)
formatted code to conform to master repo
571da52
Parthy Chandrasekaran (RD-CA)
formatted code to conform to master repo
06ee318
@partheinstein partheinstein mentioned this pull request Dec 23, 2015
Implement RFC 5077 Session Tickets #123
Open
@partheinstein partheinstein changed the title Support for session resumption using RFC5077 session ticket (TLSClient only) Support for session resumption using RFC5077 session ticket (TlsClient only) Dec 23, 2015
@peterdettman peterdettman self-assigned this Dec 25, 2015
@partheinstein

partheinstein commented Dec 10, 2016

Copy link
Copy Markdown
Author

Hi. This PR has been open for almost a year. Is there something I can do to get this PR accepted? Thank you,
Parthy

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@worsaae

worsaae commented Nov 7, 2017

Copy link
Copy Markdown

I would like to see this one making it into the bouncycastle provider
Why is it stuck?
Rgds Lars

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

frankwalter1301
frankwalter1301 suggested changes Dec 18, 2021
View reviewed changes

@frankwalter1301 frankwalter1301 left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is useful.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

1 more reviewer
@frankwalter1301 frankwalter1301 frankwalter1301 requested changes
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@peterdettman peterdettman

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

4 participants

@partheinstein @worsaae @frankwalter1301 @peterdettman
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.