首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >端口587和server="smtp.gmail.com“的ssl套接字不能握手

端口587和server="smtp.gmail.com“的ssl套接字不能握手
EN

Stack Overflow用户
提问于 2018-01-18 11:01:06
回答 1查看 1K关注 0票数 1

此代码适用于PORT=465。但是对于PORT=587,它抛出异常“javax.net.ssl.SSLException中的异常:无法识别的SSL消息,明文连接?”。

代码语言:javascript
复制
package smtpClient;

import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;

import javax.naming.NamingException;
import javax.net.ssl.HandshakeCompletedEvent;
import javax.net.ssl.HandshakeCompletedListener;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

class TLS_Mime_G {
    static final int PORT = 587;
    static String REMOTEHOST = "smtp.gmail.com";

    public static void main(String[] args)
            throws IOException, NoSuchAlgorithmException, NamingException, KeyManagementException {

        SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault();
        SSLSocket socket = (SSLSocket) ssf.createSocket(REMOTEHOST, PORT);

        socket.setEnabledProtocols(socket.getSupportedProtocols());
        socket.setEnabledCipherSuites(socket.getSupportedCipherSuites());
        socket.addHandshakeCompletedListener(new MyTLSHandshakeListener());
        socket.startHandshake();//Throws Error 

        System.out.println("Connected to " + socket.getRemoteSocketAddress());

    }
}

class MyTLSHandshakeListener implements HandshakeCompletedListener {
    public void handshakeCompleted(HandshakeCompletedEvent e) {
        System.out.println("Handshake succesful!");
        System.out.println("Cipher suite used: " + e.getCipherSuite());

    }
}

/*支持协议: SSLv2Hello支持协议: SSLv3支持协议: TLSv1支持协议: TLSv1.1支持协议: TLSv1.2支持协议: TLSv1支持协议: TLSv1.1启用协议: TLSv1.2 */

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 13:19:50

465是“隐式”TLS --以前是-SSL;您在TCP级别连接,然后立即并始终启动TLS连接,如果成功,则在TLS(通过TCP)连接上执行SMTP。

587是“显式”TLS --以前是SSL;您在TCP级别连接并开始执行SMTP,方法是读取服务器公告并至少执行EHLO命令和响应(可能还有其他命令和响应),然后执行STARTTLS命令并检查响应,如果成功,则通过现有TCP连接启动TLS连接,如果成功,则通过TCP连接执行SMTP。看看rfc 3207。

您的异常已经告诉您这一点;它表明您已经连接到一个服务器,该服务器(还没有)执行SSL/TLS,而是在执行明文--在本例中是明文的SMTP。

此外,启用所有受支持的版本和加密套件也是一个非常糟糕的主意;由于它们不安全,许多版本和密件在默认情况下是禁用的。虽然SSLv3被狮子狗打破了(!)在这种情况下,这是可以的,因为gmail (非常正确)永远不会协商;OTOH支持匿名套件(如ECDH_anon_AES* ),允许活动的攻击者轻松地截获、读取和/或更改您本应安全的电子邮件。

或者只使用javamail,它已经实现了所有这些选项,并且更正确。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48319736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档