java - 如何用Java获取SMTP服务器的证书

标签 java jakarta-mail

最近,我尝试使用 Java 邮件和 Apache commons 电子邮件框架来验证 SMTP 服务器的证书,但我没有得到任何线索,只验证 SMTP 服务器的证书(使用 ssl 或 tls)而不发送任何内容message/mail。我猜它可能使用 SSLSocket 来执行此操作,但我只是收到 SSLException 说“消息应该是普通的”,而不是证书异常(我期望)。有什么想法吗?

编辑:(使用 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)情况是:

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)

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

最佳答案

我假设你的意思是“smtp”,而不是“snmp”。

如果您收到“should be plain”错误,则意味着您连接到纯文本端口而不是 SSL 端口。

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

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

关于java - 如何用Java获取SMTP服务器的证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33169486/

相关文章:

java - IMAP 空闲,是否有可能错过事件?

java - ClientInterceptor - 捕获 404 场景

java - 按值对 Map<Key, Value> 进行排序

java - 如何像 postman 提供的保存和下载方式一样放心地保存和下载文件

Java Mail API 密码验证

javax.mail.MessagingException : Could not connect to SMTP host : <host name> port : 25 response: 554

java - KeyListener 在 dispose() 后不起作用

java - 为什么将对象添加到 ArrayList 时出现此错误 - Java

java - 从 MimeMessage 中删除附件

java - 使用 JAVA 发送邮件