如何在Java中获取SMTP服务器的证书

时间:2015-10-16 11:34:21

标签: java javamail

最近我试图通过使用Java邮件和Apache commons电子邮件框架验证SMTP服务器的证书,但我没有得到任何线索,只需验证SMTP服务器的证书(使用ssl或tls)而不发送任何消息/邮件。我猜它可能会使用 SSLSocket 来执行此操作,但我只是得到一个SSLException,说'消息应该是普通的',而不是证书异常(我预期)。任何想法?< / p>

编辑:(使用sslsocket.connect) 我真的通过使用以下代码获得证书例外

        SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory  
            .getDefault();  
    SSLSocket s = (SSLSocket) factory.createSocket("localhost", 9999);  //9999 is the SMTP SSL port
    //this really throws a exception.
    s.startHandshake();
    System.out.println("ok");  

例外是:

Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1904)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:279)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:273)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1446)

我认为这可以帮助我确定证书是否有效。

1 个答案:

答案 0 :(得分:1)

我认为你的意思是&#34; smtp&#34;而不是&#34; snmp&#34;。

如果你有一个&#34;应该是明白的&#34;错误,这意味着您连接到纯文本端口而不是SSL端口。

如果您只想验证证书是否有效而未登录,则应使用SSLSocket并查看是否可以连接而不会出现异常。

如果要验证证书是否有效以及验证信息是否有效,可以使用Transport.connect