首页 > 编程语言 >JavaMail配置SSL服务器及安装证书

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

时间:2023-08-27 12:04:46浏览次数:37  
标签:java ssl sun smtp SSL JavaMail 服务器 mail security


客户给的邮件服务器要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
[email protected]
[email protected]

 

发送邮件时得到异常如下

 

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

 

标签:java,ssl,sun,smtp,SSL,JavaMail,服务器,mail,security
From: https://blog.51cto.com/u_16237557/7252135

相关文章

  • oracle学习笔记(12)——数据库服务器工作模式与数据字典
    1、 专用服务器工作模式    1)概念:       专用服务器模式是指Oracle为每个用户进程启动一个专门的服务器进程,该服务器进程仅为该用户进程提供服务,直到用户进程断开连接时,对应的服务器进程才终止。    2)特点:       服务器进程与客户进......
  • 求生之路2私人服务器开服搭建教程centos
    求生之路2私人服务器开服搭建教程centos大家好我是艾西,朋友想玩求生之路2(left4dead2)重回经典。Steam玩起来有时候没有那么得劲,于是问我有没有可能自己搭建一个玩玩。今天跟大家分享的就是求生之路2的自己用服务器搭建的一个心路历程。(因平台原因本文中www即为xxx,com即为zzz,http/......
  • 求生之路2社区服务器sourcemod安装配置搭建教程centos
    求生之路2社区服务器sourcemod安装配置搭建教程centos大家好我是艾西,通过上文我们已经成功搭建了求生之路2的服务端。但是这个服务端是纯净的服务端,就是那种最纯粹的原版。如果想要实现插件、sm开头的命令等功能,需要安装这个sourcemod。那本篇文章给搭建简单的说下sourcemod安装以......
  • 关于自建Rustdesk 远程桌面服务器的公网访问:无法连接中继服务器的问题解决方法
    自建服务器位于内网时,内网客户端ID/中继的地址通常写成内网IP,外网客户端一般会用公网IP进行端口映射,但这样设置出现外网客户端无法连接中继服务器,但内网客户端使用正常的现象。经过半天的排查分析,当内网和外网填写的自定义服务器地址时,rust服务器无法识别出需要使用nat包的地址,默......
  • 基于LXD搭建实验室GPU服务器(一)——宿主机的基本配置
    从零搭建服务器是一个看似简单实则有些繁琐的操作,本文旨在记录并整合这些操作,使得后续搭建可以成为一个流水线般简单流程的过程。操作系统的安装过程网络上资源非常多,本文不再赘述。本文将对刚安装的ubuntu20.04.06操作系统进行基本配置。换源由于GFW的存在,因此需要先对apt进......
  • 服务器密码过期
    问题:服务器密码长时间未更改,导致服务器出现密码过期,无法进行登录;服务器密码过期出现下方情况,连接成功后马上就断开,导致无法更改新密码;由于服务器是公司的,又有之前的程序员在服务器部署项目;所以不能冒然对服务器进行密码重置; ==============================================......
  • ssh连华为云的linux服务器报 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    谜底啊,就藏在谜面上└─#sshuname@ip-p22@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WARNING:REMOTEHOSTIDENTIFICATIONHASCHANGED!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ITISPOSSIBLETHATSOMEONEISDOIN......
  • 将一个服务器通过HTTP请求另一个服务器
    1.一个服务器访问另一个服务器(不传参)@RequestMapping("/test")publicResponseEntity<String>serverToServerRequest(){//创建RestTemplate实例RestTemplaterestTemplate=newRestTemplate();//设置目标服务器的URLStringtar......
  • 玩转 PI 系列-看起来像服务器的 ARM 开发板矩阵-Firefly Cluster Server
    前言基于我个人的工作内容和兴趣,想要在家里搞一套服务器集群,用于容器/K8s等方案的测试验证。考虑过使用二手服务器,比如DellR730,还搞了一套配置清单,如下:DellR7303.5尺寸规格硬盘CPU:2686v4*2内存:16g*8存储:480Gintelssd系统盘+6tsas希捷*2个数据盘RAID卡:h73......
  • 在公网服务器进行“肾透”
    在实际操作中,我们的kali都是安装在虚拟机或者物理机、树莓派中。虽然用起来比较方便,但是网络只有运维商分配的网络IP。在很多情况下我们需要公网IP,一般都是通过frpngrp内网映射实现的。那么有没有更加简单的方法呢?安装docker这里我们需要购买一台VPS,笔者用的是阿里的轻量服务器。......