[ https://issues.apache.org/jira/browse/CAMEL-11482?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen resolved CAMEL-11482. --------------------------------- Resolution: Fixed Thanks those SSL tests are extreme and they are hard to test as different platforms and JDKs and whatnot have different ciphers supported etc. > SSLContextParameters settings are not properly copied to SslContextFactory > -------------------------------------------------------------------------- > > Key: CAMEL-11482 > URL: https://issues.apache.org/jira/browse/CAMEL-11482 > Project: Camel > Issue Type: Bug > Components: camel-jetty > Affects Versions: 2.19.0, 2.19.1 > Environment: Max OS X, Java 8 Update 131 > Ubuntu 14.04 LTS, Java 8 Update 111 > Camel 2.19.0 > Jetty9 9.4.5v20170502 and 9.3.14.v20161028 > Reporter: Roman Vottner > Assignee: Claus Ibsen > Fix For: 2.19.4, 2.20.0 > > > Jetty 9.3+ excludes unsecure ciphers which end on either MD5, SHA or SHA1 by > default now. This will however remove all ciphers that are used by either > TLSv1 or TLSv1.1 and thus no ciphers remain in order to agree on a cipher for > TLSv1 or TLSv1.1 connection attempts. (Further reading: > https://github.com/eclipse/jetty.project/issues/860) > The Jetty 9 SSL configuration documentation > (https://www.eclipse.org/jetty/documentation/9.3.x/configuring-ssl.html) > states that this exclusion cipher suites can be customized by providing an > own exclusion list. On specifying SSLContextParameters like below however > will not correctly propagate this exclution cipher suites to the > SslContextFactory of Jetty and thus use the default setting which prevents > TLSv1 and TLSv1.1 connections. > {code:title=SSLContextParameters Spring Config|borderStyle=solid} > @Bean(name = "sslContextParameters") > public SSLContextParameters sslContextParameters() { > String keyStore = env.getProperty("ssl.keyStore.resource"); > URL keyStoreUrl = this.getClass().getResource(keyStore); > // http://camel.apache.org/jetty.html > KeyStoreParameters ksp = new KeyStoreParameters(); > ksp.setResource(keyStoreUrl.getPath()); > ksp.setPassword(env.getProperty("ssl.keyStore.password")); > KeyManagersParameters kmp = new KeyManagersParameters(); > kmp.setKeyStore(ksp); > kmp.setKeyPassword(env.getProperty("ssl.key.password")); > SSLContextParameters scp = new SSLContextParameters(); > scp.setKeyManagers(kmp); > // Jetty 9.3+ support only TLSv1.2 by default hence clients not > supporting this protocol will fail > List<String> supportedSslProtocols = Arrays.asList("TLSv1", "TLSv1.1", > "TLSv1.2"); > SecureSocketProtocolsParameters protocolsParameters = new > SecureSocketProtocolsParameters(); > protocolsParameters.setSecureSocketProtocol(supportedSslProtocols); > scp.setSecureSocketProtocols(protocolsParameters); > // TLS 1.0 / 1.1 have been disabled by jetty 9.3 > // this is a first attempt to re-enable them > // see > // - > https://www.eclipse.org/jetty/documentation/9.3.x/configuring-ssl.html > // - https://github.com/eclipse/jetty.project/issues/860 > // - http://camel.apache.org/camel-configuration-utilities.html > FilterParameters cipherParameters = new FilterParameters(); > cipherParameters.getInclude().add(".*"); > cipherParameters.getExclude().add("^.*_(MD5|SHA1)$"); > scp.setCipherSuitesFilter(cipherParameters); > return scp; > } > {code} > A workaround is to use a custom JettyHttpComponent9 implementation that sets > the excludedCipherSuites manually like depicted below: > {code:title=Workaround|borderStyle=solid} > /** > * A custom jetty http component which explicitly sets the > excludedCipherSuites during creation of > * the jetty connector. > * > * Why? It seems camel does not push included/excluded cipherSuites from > {@link > * SSLContextParameters} to the {@link SslContextFactory} nor does push > explicitly listed cipher > * suites (i.e. like <em>TLS_RSA_WITH_AES_256_CBC_SHA</em>) to the Jetty > SSL context factory. > */ > public static class HackedJettyHttpComponent extends JettyHttpComponent9 { > @Override > protected AbstractConnector createConnectorJettyInternal(Server server, > > JettyHttpEndpoint endpoint, > > SslContextFactory sslcf) { > sslcf.setExcludeCipherSuites("^.*_(MD5|SHA1)$"); > return super.createConnectorJettyInternal(server, endpoint, sslcf); > } > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)