Hi Josh,
this topic is slowly getting really annoying 
I tried the jjs
command with our mail server and the output in general is pretty fine and shows, that TLSv1.2 is negotiated without any issues. However, if I try to append the java command line options inside the omero config the client keeps trying to build up a TLSv1 connection, which probably fails because our mail servers don’t allow it for security reasons. Here is a more detailed example output from master.err after appending -Djavax.net.debug=ssl:handshake:verbose
:
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.948 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.949 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.949 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.949 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.949 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.949 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.950 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.950 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.950 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.950 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.950 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.951 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.951 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.951 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.951 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.951 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.952 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.952 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.953 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.953 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.953 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.953 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.953 CEST|HandshakeContext.java:297|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.957 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_AES_128_GCM_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.958 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_AES_256_GCM_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.958 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.958 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.958 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.958 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.959 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.959 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.959 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.959 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.959 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.960 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.960 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.960 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.960 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.960 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.961 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.961 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.961 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.961 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.961 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.961 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.962 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.962 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.962 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.963 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_128_CBC_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.963 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.963 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.963 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
javax.net.ssl|ALL|16|pool-1-thread-1|2020-09-22 10:48:48.963 CEST|HandshakeContext.java:348|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
javax.net.ssl|INFO|16|pool-1-thread-1|2020-09-22 10:48:48.992 CEST|AlpnExtension.java:161|No available application protocols
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.993 CEST|SSLExtensions.java:260|Ignore, context unavailable extension: application_layer_protocol_negotiation
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.993 CEST|SSLExtensions.java:260|Ignore, context unavailable extension: renegotiation_info
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.997 CEST|ClientHello.java:653|Produced ClientHello handshake message (
"ClientHello": {
"client version" : "TLSv1",
"random" : "B9 10 85 75 94 73 86 17 36 CD 4B 1C 92 D5 46 E4 30 B2 2F 88 78 88 EA 86 C8 E4 0B 39 05 A9 5E 3E",
"session id" : "",
"cipher suites" : "[TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xC00A), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xC014), TLS_RSA_WITH_AES_256_CBC_SHA(0x0035), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA(0xC005), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(0xC00F), TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x0039), TLS_DHE_DSS_WITH_AES_256_CBC_SHA(0x0038), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(0xC009), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xC013), TLS_RSA_WITH_AES_128_CBC_SHA(0x002F), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(0xC004), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(0xC00E), TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033), TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032), TLS_EMPTY_RENEGOTIATION_INFO_SCSV(0x00FF)]",
"compression methods" : "00",
"extensions" : [
"server_name (0)": {
type=host_name (0), value=mail.hhu.de
},
"status_request (5)": {
"certificate status type": ocsp
"OCSP status request": {
"responder_id": <empty>
"request extensions": {
<empty>
}
}
},
"supported_groups (10)": {
"versions": [secp256r1, secp384r1, secp521r1, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]
},
"ec_point_formats (11)": {
"formats": [uncompressed]
},
"status_request_v2 (17)": {
"cert status request": {
"certificate status type": ocsp_multi
"OCSP status request": {
"responder_id": <empty>
"request extensions": {
<empty>
}
}
}
},
"extended_master_secret (23)": {
<empty>
},
"supported_versions (43)": {
"versions": [TLSv1]
}
]
}
)
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:48.999 CEST|Alert.java:238|Received alert message (
"Alert": {
"level" : "fatal",
"description": "handshake_failure"
}
)
javax.net.ssl|ERROR|16|pool-1-thread-1|2020-09-22 10:48:49.001 CEST|TransportContext.java:318|Fatal (HANDSHAKE_FAILURE): Received fatal alert: handshake_failure (
"throwable" : {
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:313)
at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293)
at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:186)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:171)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1403)
at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1309)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:440)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:411)
at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:507)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
at javax.mail.Service.connect(Service.java:295)
at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:503)
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:422)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:346)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:363)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:351)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy70.send(Unknown Source)
at ome.services.mail.MailUtil.sendEmail(MailUtil.java:100)
at omero.cmd.mail.SendEmailRequestI.step(SendEmailRequestI.java:131)
at omero.cmd.HandleI.steps(HandleI.java:448)
at omero.cmd.HandleI$RunSteps.innerWork(HandleI.java:509)
at omero.cmd.HandleI$1.doWork(HandleI.java:375)
at omero.cmd.HandleI$1.doWork(HandleI.java:372)
at jdk.internal.reflect.GeneratedMethodAccessor293.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at ome.services.util.Executor$Impl$Interceptor.invoke(Executor.java:568)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at ome.security.basic.EventHandler.invoke(EventHandler.java:154)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at ome.tools.hibernate.ProxyCleanupFilter$Interceptor.invoke(ProxyCleanupFilter.java:249)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at ome.services.util.ServiceHandler.invoke(ServiceHandler.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy81.doWork(Unknown Source)
at ome.services.util.Executor$Impl.execute(Executor.java:447)
at omero.cmd.HandleI.run(HandleI.java:371)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at ome.services.util.Executor$Impl$1.call(Executor.java:488)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)}
)
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:49.002 CEST|SSLSocketImpl.java:1623|close the underlying socket
javax.net.ssl|DEBUG|16|pool-1-thread-1|2020-09-22 10:48:49.002 CEST|SSLSocketImpl.java:1642|close the SSL connection (initiative)
I tried to force the java client to use TLSv1.2 via omero config (omero.jvmcfg.append) by adding -Dhttps.protocols=TLSv1.2
and -Djdk.tls.client.protocols=TLSv1.2
. I even tried -Djdk.tls.disabledAlgorithms=TLSv1
but all of these modifications didn’t show an effect on the produced debug output and the client keeps trying the TLSv1 connection.
At last I tried to disable TLSv1 and TLSv1.1 on the whole system by modifying /usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el7_8.x86_64/conf/security/java.security
(parameter jdk.tls.disabledAlgorithms
). This however showed an effect also inside the omero log, because the connection is now not possible at all:
javax.net.ssl|ERROR|18|pool-1-thread-3|2020-09-22 10:55:19.200 CEST|TransportContext.java:318|Fatal (HANDSHAKE_FAILURE): Couldn't kickstart handshaking (
"throwable" : {
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at java.base/sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
at java.base/sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
at java.base/sun.security.ssl.TransportContext.kickstart(TransportContext.java:222)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:433)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:411)
at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:507)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
at javax.mail.Service.connect(Service.java:295)
at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:503)
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:422)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:346)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:363)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:351)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy70.send(Unknown Source)
at ome.services.mail.MailUtil.sendEmail(MailUtil.java:100)
at omero.cmd.mail.SendEmailRequestI.step(SendEmailRequestI.java:131)
at omero.cmd.HandleI.steps(HandleI.java:448)
at omero.cmd.HandleI$RunSteps.innerWork(HandleI.java:509)
at omero.cmd.HandleI$1.doWork(HandleI.java:375)
at omero.cmd.HandleI$1.doWork(HandleI.java:372)
at jdk.internal.reflect.GeneratedMethodAccessor280.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at ome.services.util.Executor$Impl$Interceptor.invoke(Executor.java:568)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at ome.security.basic.EventHandler.invoke(EventHandler.java:154)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at ome.tools.hibernate.ProxyCleanupFilter$Interceptor.invoke(ProxyCleanupFilter.java:249)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at ome.services.util.ServiceHandler.invoke(ServiceHandler.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy81.doWork(Unknown Source)
at ome.services.util.Executor$Impl.execute(Executor.java:447)
at omero.cmd.HandleI.run(HandleI.java:371)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at ome.services.util.Executor$Impl$1.call(Executor.java:488)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)}
)
javax.net.ssl|DEBUG|18|pool-1-thread-3|2020-09-22 10:55:19.201 CEST|SSLSocketImpl.java:1623|close the underlying socket
javax.net.ssl|DEBUG|18|pool-1-thread-3|2020-09-22 10:55:19.201 CEST|SSLSocketImpl.java:1642|close the SSL connection (initiative)
So, in the end I’m a bit lost. I understand that there is some issue in the clientside TLS protocol settings, believing that the client is currently restricted to use TLSv1 (due to first log: "supported_versions (43)": {"versions": [TLSv1]}
and the kickstart failure after disabling TLSv1 systemwide) . On command line everything works fine, so I tend to think it’s an omero issue. Via omero config the java debug parameter is passed properly down to java (since the debug error logs are shown), but the other parameters mentioned here don’t show any effects. Is there another way to pass the parameters except omero.jvmcfg.append
? Or do you have any other ideas how I can force the omero mailer to use TLSv1.2?
Cheers,
Anna