Skip to content

Commit ba462e2

Browse files
committed
BCJSSE: Keep original creation time across session lifetime
1 parent b13684a commit ba462e2

File tree

5 files changed

+21
-14
lines changed

5 files changed

+21
-14
lines changed

tls/src/main/java/org/bouncycastle/jsse/provider/ProvSSLSession.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ class ProvSSLSession
1717
protected final JsseSessionParameters jsseSessionParameters;
1818

1919
ProvSSLSession(ProvSSLSessionContext sslSessionContext, ConcurrentHashMap<String, Object> valueMap, String peerHost,
20-
int peerPort, TlsSession tlsSession, JsseSessionParameters jsseSessionParameters)
20+
int peerPort, long creationTime, TlsSession tlsSession, JsseSessionParameters jsseSessionParameters)
2121
{
22-
super(sslSessionContext, valueMap, peerHost, peerPort);
22+
super(sslSessionContext, valueMap, peerHost, peerPort, creationTime);
2323

2424
this.tlsSession = tlsSession;
2525
this.sessionParameters = tlsSession == null ? null : tlsSession.exportSessionParameters();
@@ -110,6 +110,7 @@ public boolean isValid()
110110
static final ProvSSLSession createDummySession()
111111
{
112112
// NB: Allow session value binding on failed connections for SunJSSE compatibility
113-
return new ProvSSLSession(null, createValueMap(), null, -1, null, new JsseSessionParameters(null, null));
113+
return new ProvSSLSession(null, createValueMap(), null, -1, createCreationTime(), null,
114+
new JsseSessionParameters(null, null));
114115
}
115116
}

tls/src/main/java/org/bouncycastle/jsse/provider/ProvSSLSessionBase.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ abstract class ProvSSLSessionBase
3636
protected final AtomicLong lastAccessedTime;
3737

3838
ProvSSLSessionBase(ProvSSLSessionContext sslSessionContext, ConcurrentHashMap<String, Object> valueMap,
39-
String peerHost, int peerPort)
39+
String peerHost, int peerPort, long creationTime)
4040
{
4141
this.sslSessionContext = new AtomicReference<ProvSSLSessionContext>(sslSessionContext);
4242
this.valueMap = valueMap;
4343
this.fipsMode = (null == sslSessionContext) ? false : sslSessionContext.getContextData().isFipsMode();
4444
this.crypto = (null == sslSessionContext) ? null : sslSessionContext.getContextData().getCrypto();
4545
this.peerHost = peerHost;
4646
this.peerPort = peerPort;
47-
this.creationTime = System.currentTimeMillis();
47+
this.creationTime = creationTime;
4848
this.exportSSLSession = SSLSessionUtil.exportSSLSession(this);
4949
this.lastAccessedTime = new AtomicLong(creationTime);
5050
}
@@ -358,6 +358,11 @@ private void implInvalidate(boolean removeFromSessionContext)
358358
invalidateTLS();
359359
}
360360

361+
protected static long createCreationTime()
362+
{
363+
return System.currentTimeMillis();
364+
}
365+
361366
protected static ConcurrentHashMap<String, Object> createValueMap()
362367
{
363368
return new ConcurrentHashMap<String, Object>();

tls/src/main/java/org/bouncycastle/jsse/provider/ProvSSLSessionContext.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ synchronized ProvSSLSession reportSession(ProvSSLSessionHandshake handshakeSessi
9696

9797
if (!addToCache)
9898
{
99-
return new ProvSSLSession(this, handshakeSession.getValueMap(), peerHost, peerPort, tlsSession,
100-
jsseSessionParameters);
99+
return new ProvSSLSession(this, handshakeSession.getValueMap(), peerHost, peerPort,
100+
handshakeSession.getCreationTime(), tlsSession, jsseSessionParameters);
101101
}
102102

103103
SessionID sessionID = makeSessionID(tlsSession.getSessionID());
@@ -106,8 +106,8 @@ synchronized ProvSSLSession reportSession(ProvSSLSessionHandshake handshakeSessi
106106
ProvSSLSession session = sessionEntry == null ? null : sessionEntry.get();
107107
if (null == session || session.getTlsSession() != tlsSession)
108108
{
109-
session = new ProvSSLSession(this, handshakeSession.getValueMap(), peerHost, peerPort, tlsSession,
110-
jsseSessionParameters);
109+
session = new ProvSSLSession(this, handshakeSession.getValueMap(), peerHost, peerPort,
110+
handshakeSession.getCreationTime(), tlsSession, jsseSessionParameters);
111111

112112
if (null != sessionID)
113113
{

tls/src/main/java/org/bouncycastle/jsse/provider/ProvSSLSessionHandshake.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ class ProvSSLSessionHandshake
2020
ProvSSLSessionHandshake(ProvSSLSessionContext sslSessionContext, String peerHost, int peerPort,
2121
SecurityParameters securityParameters, JsseSecurityParameters jsseSecurityParameters)
2222
{
23-
this(sslSessionContext, createValueMap(), peerHost, peerPort, securityParameters, jsseSecurityParameters);
23+
this(sslSessionContext, createValueMap(), peerHost, peerPort, createCreationTime(), securityParameters,
24+
jsseSecurityParameters);
2425
}
2526

2627
protected ProvSSLSessionHandshake(ProvSSLSessionContext sslSessionContext,
27-
ConcurrentHashMap<String, Object> valueMap, String peerHost, int peerPort,
28+
ConcurrentHashMap<String, Object> valueMap, String peerHost, int peerPort, long creationTime,
2829
SecurityParameters securityParameters, JsseSecurityParameters jsseSecurityParameters)
2930
{
30-
super(sslSessionContext, valueMap, peerHost, peerPort);
31+
super(sslSessionContext, valueMap, peerHost, peerPort, creationTime);
3132

3233
this.securityParameters = securityParameters;
3334
this.jsseSecurityParameters = jsseSecurityParameters;

tls/src/main/java/org/bouncycastle/jsse/provider/ProvSSLSessionResumed.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ class ProvSSLSessionResumed
1616
SecurityParameters securityParameters, JsseSecurityParameters jsseSecurityParameters,
1717
ProvSSLSession resumedSession)
1818
{
19-
super(sslSessionContext, resumedSession.getValueMap(), peerHost, peerPort, securityParameters,
20-
jsseSecurityParameters);
19+
super(sslSessionContext, resumedSession.getValueMap(), peerHost, peerPort, resumedSession.getCreationTime(),
20+
securityParameters, jsseSecurityParameters);
2121

2222
this.tlsSession = resumedSession.getTlsSession();
2323
this.sessionParameters = tlsSession.exportSessionParameters();

0 commit comments

Comments
 (0)