JavaMail:与office365连接时“握手时远程主机关闭连接”

时间:2016-01-05 07:26:08

标签: ssl javamail office365

我尝试使用javaMail v1.5.3连接到office365邮件服务器(应用程序部署在tomcat 6上)。我在启动时运行一个线程,它在一分钟睡眠的循环中检查新电子邮件。在大多数情况下,连接成功建立,一切正常,但有时我得到 “握手期间远程主机关闭连接”错误。

错误是由

引起的
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.read(InputRecord.java:482)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)

我尝试过来自以下方面的问题: How to make Java 6, which fails SSL connection with "SSL peer shut down incorrectly", succeed like Java 7?javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

-Dhttps.protocols=TLSv1,SSLv3和 - Dsun.security.ssl.allowUnsafeRenegotiation=true添加到我的tomcat环境中 但我没有得到任何结果。仍然 - 随机发生异常。

我在javax.net和IMAP连接上启用了调试模式并获得了结果:
当连接没有正确建立时,log看起来像这样:

 DEBUG: setDebug: JavaMail version 1.5.3
 DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle]
 DEBUG IMAP: mail.imap.fetchsize: 16384
 DEBUG IMAP: mail.imap.ignorebodystructuresize: false
 DEBUG IMAP: mail.imap.statuscachetimeout: 1000
 DEBUG IMAP: mail.imap.appendbuffersize: -1
 DEBUG IMAP: mail.imap.minidletime: 10
 DEBUG IMAP: closeFoldersOnStoreFailure
 DEBUG IMAP: trying to connect to host "outlook.office365.com", port 993, isSSL true
 Ignoring unavailable cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA
 Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
 Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
 Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256
 Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
 Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
 Ignoring unavailable cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA
 Ignoring unavailable cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA
 Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_128_CBC_SHA256
 Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
 %% Client cached [Session-4, TLS_RSA_WITH_AES_128_CBC_SHA]
 %% Try resuming [Session-4, TLS_RSA_WITH_AES_128_CBC_SHA] from port 51400
 *** ClientHello, TLSv1
 RandomCookie:  
 GMT: 1435130635 
 bytes = { , , , , , , , , , , , , , , , , , , , , , , , , , ,  }
 Session ID:  {66, 20, 0, 0, 123, 9, 142, 72, 150, 39, 215, 34, 63, 169, 129, 23, 25, 182, 88, 196, 86, 27, 216, 191, 117, 196, 37, 118, 229, 8, 9, 64}-
 Cipher Suites: [TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]-
 Compression Methods:  { }
 Extension server_name, server_name: [host_name: outlook.office365.com]
 ***-
 [write] MD5 and SHA1 hashes:  len = 125
 46@CheckMailThread, WRITE: TLSv1 Handshake, length = 125
 [Raw write]: length = 130
 46@CheckMailThread, received EOFException: error
 46@CheckMailThread, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
 46@CheckMailThread, SEND TLSv1 ALERT:  fatal, description = handshake_failure
 46@CheckMailThread, WRITE: TLSv1 Alert, length = 2
 [Raw write]: length = 7
 46@CheckMailThread, called closeSocket()

然后发生异常

javax.mail.MessagingException: Remote host closed connection during handshake;
  nested exception is:
    javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:733)
    at javax.mail.Service.connect(Service.java:364)
    at javax.mail.Service.connect(Service.java:245)
    (...)
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:953)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:574)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:369)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:236)
    at com.sun.mail.iap.Protocol.<init>(Protocol.java:117)
    at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:120)
    at com.sun.mail.imap.IMAPStore.newIMAPProtocol(IMAPStore.java:753)
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:696)
    ... 6 more
Caused by: java.io.EOFException: SSL peer shut down incorrectly
    at sun.security.ssl.InputRecord.read(InputRecord.java:482)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
    ... 16 more

另一方面,在大多数情况下,线程正常,日志看起来像这样:

DEBUG: setDebug: JavaMail version 1.5.3 
DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle] 
DEBUG IMAP: mail.imap.fetchsize: 16384 
DEBUG IMAP: mail.imap.ignorebodystructuresize: false 
DEBUG IMAP: mail.imap.statuscachetimeout: 1000 
DEBUG IMAP: mail.imap.appendbuffersize: -1
 DEBUG IMAP: mail.imap.minidletime: 10 
DEBUG IMAP: closeFoldersOnStoreFailure 
DEBUG IMAP: trying to connect to host "outlook.office365.com", port 993, isSSL true 
Ignoring unavailable cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA 
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 
Ignoring unavailable cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA 
Ignoring unavailable cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA 
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_128_CBC_SHA256 
Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false 
%% Client cached [Session-150, TLS_RSA_WITH_AES_128_CBC_SHA]
 %% Try resuming [Session-150, TLS_RSA_WITH_AES_128_CBC_SHA] from port 59183
 *** ClientHello, TLSv1 
RandomCookie:   
GMT: 1435076193  
bytes = { , , , , , , , , , , , , , , , , , , , , , , , , , , , }  
Session ID:   
{241, 61, 0, 0, 224, 114, 43, 139, 255, 64, 232, 7, 209, 90, 5, 63, 63, 117, 33, 66, 215, 35, 48, 83, 131, 211, 38, 151, 73, 232, 6, 120} 
Cipher Suites: [TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, TLS_EMPTY_RENEGOTIATION_INFO_SCSV] 
Compression Methods:  {  
 } 
Extension server_name, server_name: [host_name: outlook.office365.com] 
*** 
[write] MD5 and SHA1 hashes:  len = 125 
46@CheckMailThread, WRITE: TLSv1 Handshake, length = 125 
[Raw write]: length = 130 
[Raw read]: length = 5 
[Raw read]: length = 3532 
46@CheckMailThread, READ: TLSv1 Handshake, length = 3532 
*** ServerHello, TLSv1 
RandomCookie:   
GMT: 1435076194  
Bytes = { , , , , , , , , , , , , , , , , , , , , , , , , , , , } 
Session ID:   
{112, 39, 0, 0, 59, 34, 200, 120, 31, 23, 110, 30, 10, 37, 236, 213, 46, 233, 201, 3, 253, 223, 81, 109, 188, 218, 33, 164, 33, 127, 27, 55} 
Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA 
Compression Method: 0 
Extension renegotiation_info, renegotiated_connection: <empty> 
*** 
%% Initialized:  [Session-151, TLS_RSA_WITH_AES_128_CBC_SHA]
 ** TLS_RSA_WITH_AES_128_CBC_SHA 
[read] MD5 and SHA1 hashes:  len = 81 
*** Certificate chain (...)

然后去证书等

所以我很奇怪是什么导致这种不一致的行为。

0 个答案:

没有答案