Skip to content

Commit 2a3ffb2

Browse files
committed
BCJSSE: System props to disable DH default suites
- org.bouncycastle.jsse.client.dh.disableDefaultSuites (false) - org.bouncycastle.jsse.server.dh.disableDefaultSuites (false)
1 parent 1eac07f commit 2a3ffb2

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

docs/releasenotes.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ <h3>2.1.3 Additional Features and Functionality</h3>
6464
<li>The NetscapeCertType class now has a hasUsages() method on it for querying usage settings on its bit string.</li>
6565
<li>Support for additional input has been added for deterministic (EC)DSA.</li>
6666
<li>The OpenPGP API provides better support for subkey generation.</li>
67+
<li>BCJSSE: Added boolean system properties "org.bouncycastle.jsse.client.dh.disableDefaultSuites" and "org.bouncycastle.jsse.server.dh.disableDefaultSuites".
68+
Default "false". Set to "true" to disable inclusion of DH cipher suites in the default cipher suites for client/server respectively.</li>
6769
</ul>
6870
<h3>2.1.4 Notes</h3>
6971
<ul>

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

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.bouncycastle.jsse.java.security.BCCryptoPrimitive;
3838
import org.bouncycastle.tls.CipherSuite;
3939
import org.bouncycastle.tls.ProtocolVersion;
40+
import org.bouncycastle.tls.TlsDHUtils;
4041
import org.bouncycastle.tls.TlsUtils;
4142
import org.bouncycastle.tls.crypto.impl.jcajce.JcaTlsCrypto;
4243
import org.bouncycastle.tls.crypto.impl.jcajce.JcaTlsCryptoProvider;
@@ -327,15 +328,22 @@ private static Map<String, ProtocolVersion> createSupportedProtocolMapFips(
327328
}
328329

329330
private static String[] getDefaultEnabledCipherSuites(Map<String, CipherSuiteInfo> supportedCipherSuiteMap,
330-
String cipherSuitesPropertyName, List<String> defaultCipherSuiteList)
331+
List<String> defaultCipherSuiteList, boolean disableDHDefaultSuites, String cipherSuitesPropertyName)
331332
{
332333
List<String> candidates = getJdkTlsCipherSuites(cipherSuitesPropertyName, defaultCipherSuiteList);
333334

334335
String[] result = new String[candidates.size()];
335336
int count = 0;
336337
for (String candidate : candidates)
337338
{
338-
if (!supportedCipherSuiteMap.containsKey(candidate))
339+
CipherSuiteInfo cipherSuiteInfo = supportedCipherSuiteMap.get(candidate);
340+
if (null == cipherSuiteInfo)
341+
{
342+
continue;
343+
}
344+
if (disableDHDefaultSuites &&
345+
candidates == defaultCipherSuiteList &&
346+
TlsDHUtils.isDHCipherSuite(cipherSuiteInfo.getCipherSuite()))
339347
{
340348
continue;
341349
}
@@ -352,15 +360,21 @@ private static String[] getDefaultEnabledCipherSuites(Map<String, CipherSuiteInf
352360
private static String[] getDefaultEnabledCipherSuitesClient(Map<String, CipherSuiteInfo> supportedCipherSuiteMap,
353361
List<String> defaultCipherSuiteList)
354362
{
355-
return getDefaultEnabledCipherSuites(supportedCipherSuiteMap, PROPERTY_CLIENT_CIPHERSUITES,
356-
defaultCipherSuiteList);
363+
boolean disableDHDefaultSuites = PropertyUtils
364+
.getBooleanSystemProperty("org.bouncycastle.jsse.client.dh.disableDefaultSuites", false);
365+
366+
return getDefaultEnabledCipherSuites(supportedCipherSuiteMap, defaultCipherSuiteList, disableDHDefaultSuites,
367+
PROPERTY_CLIENT_CIPHERSUITES);
357368
}
358369

359370
private static String[] getDefaultEnabledCipherSuitesServer(Map<String, CipherSuiteInfo> supportedCipherSuiteMap,
360371
List<String> defaultCipherSuiteList)
361372
{
362-
return getDefaultEnabledCipherSuites(supportedCipherSuiteMap, PROPERTY_SERVER_CIPHERSUITES,
363-
defaultCipherSuiteList);
373+
boolean disableDHDefaultSuites = PropertyUtils
374+
.getBooleanSystemProperty("org.bouncycastle.jsse.server.dh.disableDefaultSuites", false);
375+
376+
return getDefaultEnabledCipherSuites(supportedCipherSuiteMap, defaultCipherSuiteList, disableDHDefaultSuites,
377+
PROPERTY_SERVER_CIPHERSUITES);
364378
}
365379

366380
private static String[] getDefaultEnabledProtocols(Map<String, ProtocolVersion> supportedProtocolMap,

0 commit comments

Comments
 (0)