`
wangcheng
  • 浏览: 1466688 次
  • 性别: Icon_minigender_1
  • 来自: 青岛人在北京
社区版块
存档分类
最新评论

JavaMail配置SSL服务器及安装证书

    博客分类:
  • java
阅读更多

客户给的邮件服务器要SSL,使用Spring的JavaMailSenderImpl,Spring配置如下

 

<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
	<property name="host" value="${mail.smtp.host}" />
	<property name="username" value="${mail.smtp.username}" />
	<property name="password" value="${mail.smtp.password}" />
	<property name="port" value="${mail.smtp.port}" />
	<property name="javaMailProperties">
		<props>
			<prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
			<prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
		 	<prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop>
			<prop key="mail.smtp.socketFactory.port">${mail.smtp.port}</prop>
			<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
			<prop key="mail.smtp.socketFactory.fallback">false</prop>
		</props>
	</property>
</bean>
 

mail.properties内容如下

 

mail.smtp.host=smtp.xyz.com
mail.smtp.port=465
mail.smtp.username=alerts+abc.net
mail.smtp.password=12345678
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.timeout=50000
mail.from=alerts@abc.net
mail.replyTo=alerts@abc.net

 

发送邮件时得到异常如下

 

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 org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:419)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:342)
Caused by: javax.mail.MessagingException: Exception reading response;
  nested exception is:
    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 com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1462)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1260)
    ... 4 more
Caused by: 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 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
    ... 8 more
Caused by: 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.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
    at sun.security.validator.Validator.validate(Validator.java:218)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
    ... 20 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
    ... 26 more

 

Google一下,需要保存安装证书

 

官方的QA http://java.sun.com/products/javamail/FAQ.html#installcert

 

Q: When connecting to my mail server over SSL I get an exception like "unable to find valid certification path to requested target".
A: Your server is probably using a test certificate or self-signed certificate instead of a certificate signed by a commercial Certificate Authority. You'll need to install the server's certificate into your trust store. The InstallCert program will help.

 

在这里 http://blogs.sun.com/andreas/entry/no_more_unable_to_find 有解决方案

 

http://blogs.sun.com/andreas/resource/InstallCert.java 的代码来安装证书

 

运行 java InstallCert smtp.xyz.com:465
得到jssecacerts文件后复制到jdk1.6.0_14\jre\lib\security目录

 

然后再发送邮件就OK了

 

附件是 InstallCert.java

分享到:
评论
3 楼 liangwangzhe 2014-11-19  
1楼人才,鉴定完毕!
2 楼 rockyzheng 2013-07-18  
1 楼的,服了你了。
1 楼 xiaokang1582830 2012-05-04  
InstallCert.java运行直接Usage: java InstallCert <host>[:port] [passphrase],public static void main(String[] args) throws Exception {
String host;
int port;
char[] passphrase;
if ((args.length == 1) || (args.length == 2)) {
    String[] c = args[0].split(":");
    host = c[0];
    port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
    String p = (args.length == 1) ? "changeit" : args[1];
    passphrase = p.toCharArray();
} else {
    System.out.println("Usage: java InstallCert <host>[:port] [passphrase]");
    return;
}这代码有问题args为空不可能进行第一步

相关推荐

    关于用javamail发送邮件时,由于邮件服务器要SSL,解决办法

    在使用JavaMail进行邮件发送时,如果邮件服务器配置了SSL/TLS,我们需要在代码中启用相应的安全设置。 在`SendMail.java`中,我们需要设置以下关键参数: 1. `Properties props`:这是一个属性对象,用来存储连接...

    javamail收发邮件加密和不加密

    - 当使用加密连接时,需要处理服务器证书验证。JavaMail默认会检查服务器的证书是否由受信任的证书颁发机构签名。如果遇到自签名或不受信任的证书,可能需要自定义`javax.net.ssl.TrustManager`。 7. **示例代码**...

    完整的javamail发送邮件源码

    这需要在`Session`配置中启用SSL/TLS,并可能需要提供相应的证书或信任管理器。 9. 邮件附件:`MimeBodyPart`可以用来添加附件,支持常见文件类型,如.txt、.pdf、.jpg等。通过`setDataHandler()`方法设置数据...

    关于javaMail的资料关于javaMail的资料

    2. **配置安全参数**:在创建 Session 时,可以通过设置 properties 来启用 SSL/TLS,并指定证书路径。 五、收邮件与IMAP/POP3 1. **IMAP(Internet Message Access Protocol)**:允许用户从服务器检索邮件,同时...

    javaMail.zip

    - 邮件服务器的配置问题,如端口不通、SSL证书不匹配等。 - 发送失败,可能是因为SMTP服务器限制了发送频率,或者用户名密码错误。 - 邮件格式问题,比如正文编码不正确导致乱码,或者附件无法正常打开。 - 安全性...

    SSM框架+Javamail发送邮件.pdf

    在实际开发中,根据不同的邮件服务提供商,可能需要调整SSL设置或其他配置,但基本的实现思路是相似的。理解SMTP和SSL的工作原理,以及如何使用Javamail API,将有助于我们更高效地实现邮件功能。

    java邮件发送文档的功能使用邮箱在服务器上部署需要注意

    - **证书管理**:如果使用了SSL/TLS加密,确保有正确的证书配置。 - **敏感信息保护**:避免在日志文件中记录敏感信息,如用户名、密码等。 #### 3. 性能优化 - **连接池**:使用连接池管理SMTP连接,减少资源消耗...

    基于JAVA开发的邮件服务器

    开发者需配置服务器证书,并在JavaMail API中启用安全连接。 5. 邮件认证:为了防止垃圾邮件,邮件服务器通常需要用户认证。这可以通过基于用户名和密码的简单认证,或者更复杂的身份验证机制如CRAM-MD5、DIGEST-MD...

    Java邮件开发(4)_邮件开发中问题汇总

    - **SSL/TLS安全问题**:对于需要加密的连接,确保已启用SSL或TLS,并正确配置了证书。 9. **异常处理**: 发送邮件过程中可能会遇到各种异常,如MailSendException、AuthenticationFailedException等。需要适当...

    基于Java的邮件服务器源程序

    9. **配置管理**:邮件服务器需要配置各种参数,如监听端口、认证信息、SSL证书等,这些通常通过配置文件或环境变量来设置。 10. **异常处理**:邮件服务器需处理各种可能出现的错误情况,例如网络中断、邮件格式...

    java版邮件服务器

    Java版邮件服务器是一种基于Java技术实现的邮件服务系统...- 安全编程,如证书管理、SSL/TLS配置 通过学习和实践,开发者可以构建出自己的Java邮件服务器,满足特定需求,同时也能提升在邮件系统开发方面的专业技能。

    基于YMP框架实现的邮件发送服务模块,支持多帐号配置;.rar

    本博客介绍基于SSM框架(Spring4.0+SpringMVC+Mybatis)组合的Javamail应用,邮箱的话基于腾讯的QQ邮箱,其实也是Foxmail邮箱 先要了解一下SMTP协议和SSL加密 SMTP:称为简单邮件传输协议(Simple Mail Transfer ...

    Q版聊天软件服务器端

    同时,为了保证数据安全,服务器通信应使用SSL/TLS加密,这需要配置服务器证书和密钥。 此外,服务器端还需要包含以下关键组件: 1. **用户认证与授权**:服务器必须能验证用户的登录凭证,并对用户进行权限控制,...

    JAVA Mail Application

    在配置`Session`时,可以指定是否启用SSL/TLS,以及提供相应的证书信息。 8. **处理附件**:使用`MimeBodyPart`和`MimeMultipart`可以添加附件到邮件。`MimeBodyPart`表示单个部分,可以是文本或文件,`...

    JavaMailServer与Client部署

    通过以上步骤,你将能够成功地配置Apache James邮件服务器,并使用JavaMail API创建和管理邮件。理解这些知识点对于开发和维护企业级邮件系统至关重要。然而,实际操作中可能还会遇到其他问题,如权限配置、防火墙...

    JES-javaemailserver

    在搭建JES时,你需要熟悉这些协议的工作原理,以便正确配置服务器。 1. **SMTP服务器配置**:SMTP是发送邮件的协议。JES作为SMTP服务器,需要配置监听端口、域名称、身份验证机制(如PLAIN、LOGIN或CRAM-MD5)等。...

    通过TLS发送邮件

    标题中的“通过TLS发送邮件”指的是使用Transport Layer Security (TLS) ...同时,邮件服务器应持有有效的SSL/TLS证书,以便进行身份验证。了解这些知识点对于任何需要通过编程方式发送安全邮件的开发者都非常重要。

    JMeter中文使用手册

    - 进行SSL测试时,需要配置相应的加密包,并在`jmeter.properties`文件中注册SSL提供者,以便更好地管理证书。 通过以上概述可以看出,JMeter是一款功能强大的性能测试工具,不仅支持多种资源的压力测试,还能进行...

Global site tag (gtag.js) - Google Analytics