Ssl JavaMail:“;握手期间远程主机关闭连接”;在连接office365时

Ssl JavaMail:“;握手期间远程主机关闭连接”;在连接office365时,ssl,jakarta-mail,office365,Ssl,Jakarta Mail,Office365,我尝试使用javaMail v1.5.3连接到office365邮件服务器(应用程序部署在Tomcat6上)。我在启动时运行一个线程,在一分钟睡眠的循环中检查新电子邮件。在大多数情况下,连接已成功建立,一切正常,但有时我会 “握手期间远程主机关闭连接”错误 错误是由以下原因引起的: Caused by: java.io.EOFException: SSL peer shut down incorrectly at sun.security.ssl.InputRecord.read(InputRe

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

错误是由以下原因引起的:

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)
我试过以下几种方法: 以及:

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

我在javax.net和IMAP连接上启用了调试模式,并获得了结果:
连接未正确建立时,日志如下所示:

 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
javax.mail.MessaginException:握手期间远程主机关闭连接;
嵌套异常是:
javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接
在com.sun.mail.imap.IMAPStore.protocolConnect上(IMAPStore.java:733)
在javax.mail.Service.connect(Service.java:364)
在javax.mail.Service.connect(Service.java:245)
(...)
原因:javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接
位于sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:953)
位于sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
位于sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
位于sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)
位于com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:574)
在com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:369)上
位于com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:236)
在com.sun.mail.iap.Protocol.(Protocol.java:117)
在com.sun.mail.imap.protocol.IMAPProtocol.(IMAPProtocol.java:120)
位于com.sun.mail.imap.IMAPStore.newIMAPProtocol(IMAPStore.java:753)
在com.sun.mail.imap.IMAPStore.protocolConnect上(IMAPStore.java:696)
... 还有6个
原因:java.io.EOFException:SSL对等机错误关闭
位于sun.security.ssl.InputRecord.read(InputRecord.java:482)
位于sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
... 还有16个
另一方面,在大多数情况下,线程运行正常,日志如下所示:

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 (...)
DEBUG:setDebug:JavaMail版本1.5.3
调试:getProvider()返回javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle]
调试IMAP:mail.IMAP.fetchsize:16384
调试IMAP:mail.IMAP.ignorebodystructuresize:false
调试IMAP:mail.IMAP.statuscachetimeout:1000
调试IMAP:mail.IMAP.appendbuffersize:-1
调试IMAP:mail.IMAP.minidletime:10
调试IMAP:closeFoldersOnStoreFailure
调试IMAP:尝试连接到主机“outlook.office365.com”,端口993,isSSL true
忽略不可用的密码套件:TLS_DHE_RSA_WITH_AES_256_CBC_SHA
忽略不支持的密码套件:TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
忽略不支持的密码套件:TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
忽略不支持的密码套件:TLS_RSA_WITH_AES_256_CBC_SHA256
忽略不支持的密码套件:TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
忽略不支持的密码套件:TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
忽略不可用的密码套件:TLS_DHE_DSS_WITH_AES_256_CBC_SHA
忽略不可用的密码套件:TLS_RSA_WITH_AES_256_CBC_SHA
忽略不支持的密码套件:TLS_RSA_WITH_AES_128_CBC_SHA256
允许不安全的重新协商:false
允许旧版hello消息:true
第一次握手是否正确
是否安全重新谈判:错误
%%客户端缓存[会话150,TLS\U RSA\U与\U AES\U 128\U CBC\U SHA]
%%尝试从端口59183恢复[Session-150,TLS_RSA_和_AES_128_CBC_SHA]
***ClientHello,TLSv1
随机cookie:
格林尼治时间:1435076193
字节={,,,,,,,,}
会话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} 
密码套件:[TLS\ U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U MD5,TLS\u空\u重新协商\u信息\u SCSV]
压缩方法:{
} 
扩展服务器名称,服务器名称:[主机名称:outlook.office365.com]
*** 
[写入]MD5和SHA1哈希:len=125
46@CheckMailThread,写入:TLSv1握手,长度=125
[原始写入]:长度=130
[原始读取]:长度=5
[原始读取]:长度=3532
46@CheckMailThread,读取:TLSv1握手,长度=3532
***你好,TLSv1
随机cookie:
格林尼治时间:1435076194
字节={,,,,,,,,}
会话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} 
密码套件:TLS_RSA_与_AES_128_CBC_SHA
压缩方法:0
扩展重新协商\u信息,重新协商的\u连接:
*** 
%%已初始化:[会话151,TLS\U RSA\U与\U AES\U 128\U CBC\U SHA]
**TLS_RSA_与_AES_128_CBC_SHA
[读取]MD5和SHA1哈希:len=81
***证书链(…)
然后是证书等等


所以我想知道是什么导致了这种不一致的行为

如果它大部分时间都能工作,但有时不能工作,则可能与连接和服务器端问题有关。例如,服务器可能会在高负载等情况下关闭连接。这种情况会发生,您可能对此无能为力。因此,在一段时间后重试并希望问题已经消失。您还应该考虑Outlook。Office 365.com不是一个服务器,而是大量的服务器。所以有