spring邮件发送需要ssl证书

需要将下列代码编译运行:

1 1 import java.io.BufferedReader; 2 2 import java.io.File; 3 3 import java.io.FileInputStream; 4 4 import java.io.FileOutputStream; 5 5 import java.io.InputStream; 6 6 import java.io.InputStreamReader; 7 7 import java.io.OutputStream; 8 8 import java.security.KeyStore; 9 9 import java.security.MessageDigest; 10 10 import java.security.cert.CertificateException; 11 11 import java.security.cert.X509Certificate; 12 12 13 13 import javax.net.ssl.SSLContext; 14 14 import javax.net.ssl.SSLException; 15 15 import javax.net.ssl.SSLSocket; 16 16 import javax.net.ssl.SSLSocketFactory; 17 17 import javax.net.ssl.TrustManager; 18 18 import javax.net.ssl.TrustManagerFactory; 19 19 import javax.net.ssl.X509TrustManager; 20 20 21 21 public class InstallCert { 22 22 23 23 public static void main(String[] args) throws Exception { 24 24 String host; 25 25 int port; 26 26 char[] passphrase; 27 27 if ((args.length == 1) || (args.length == 2)) { 28 28 String[] c = args[0].split(":"); 29 29 host = c[0]; 30 30 port = (c.length == 1) ? 443 : Integer.parseInt(c[1]); 31 31 String p = (args.length == 1) ? "changeit" : args[1]; 32 32 passphrase = p.toCharArray(); 33 33 } else { 34 34 System.out 35 35 .println("Usage: java InstallCert <host>[:port] [passphrase]"); 36 36 return; 37 37 } 38 38 39 39 File file = new File("jssecacerts"); 40 40 if (file.isFile() == false) { 41 41 char SEP = File.separatorChar; 42 42 File dir = new File(System.getProperty("java.home") + SEP + "lib" 43 43 + SEP + "security"); 44 44 file = new File(dir, "jssecacerts"); 45 45 if (file.isFile() == false) { 46 46 file = new File(dir, "cacerts"); 47 47 } 48 48 } 49 49 System.out.println("Loading KeyStore " + file + "..."); 50 50 InputStream in = new FileInputStream(file); 51 51 KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 52 52 ks.load(in, passphrase); 53 53 in.close(); 54 54 55 55 SSLContext context = SSLContext.getInstance("TLS"); 56 56 TrustManagerFactory tmf = TrustManagerFactory 57 57 .getInstance(TrustManagerFactory.getDefaultAlgorithm()); 58 58 tmf.init(ks); 59 59 X509TrustManager defaultTrustManager = (X509TrustManager) tmf 60 60 .getTrustManagers()[0]; 61 61 SavingTrustManager tm = new SavingTrustManager(defaultTrustManager); 62 62 context.init(null, new TrustManager[] { tm }, null); 63 63 SSLSocketFactory factory = context.getSocketFactory(); 64 64 65 65 System.out 66 66 .println("Opening connection to " + host + ":" + port + "..."); 67 67 SSLSocket socket = (SSLSocket) factory.createSocket(host, port); 68 68 socket.setSoTimeout(10000); 69 69 try { 70 70 System.out.println("Starting SSL handshake..."); 71 71 socket.startHandshake(); 72 72 socket.close(); 73 73 System.out.println(); 74 74 System.out.println("No errors, certificate is already trusted"); 75 75 } catch (SSLException e) { 76 76 System.out.println(); 77 77 e.printStackTrace(System.out); 78 78 } 79 79 80 80 X509Certificate[] chain = tm.chain; 81 81 if (chain == null) { 82 82 System.out.println("Could not obtain server certificate chain"); 83 83 return; 84 84 } 85 85 86 86 BufferedReader reader = new BufferedReader(new InputStreamReader( 87 87 System.in)); 88 88 89 89 System.out.println(); 90 90 System.out.println("Server sent " + chain.length + " certificate(s):"); 91 91 System.out.println(); 92 92 MessageDigest sha1 = MessageDigest.getInstance("SHA1"); 93 93 MessageDigest md5 = MessageDigest.getInstance("MD5"); 94 94 for (int i = 0; i < chain.length; i++) { 95 95 X509Certificate cert = chain[i]; 96 96 System.out.println(" " + (i + 1) + " Subject " 97 97 + cert.getSubjectDN()); 98 98 System.out.println(" Issuer " + cert.getIssuerDN()); 99 99 sha1.update(cert.getEncoded()); 100100 System.out.println(" sha1 " + toHexString(sha1.digest())); 101101 md5.update(cert.getEncoded()); 102102 System.out.println(" md5 " + toHexString(md5.digest())); 103103 System.out.println(); 104104 } 105105 106106 System.out 107107 .println("Enter certificate to add to trusted keystore or 'q' to quit: [1]"); 108108 String line = reader.readLine().trim(); 109109 int k; 110110 try { 111111 k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1; 112112 } catch (NumberFormatException e) { 113113 System.out.println("KeyStore not changed"); 114114 return; 115115 } 116116 117117 X509Certificate cert = chain[k]; 118118 String alias = host + "-" + (k + 1); 119119 ks.setCertificateEntry(alias, cert); 120120 121121 OutputStream out = new FileOutputStream("jssecacerts"); 122122 ks.store(out, passphrase); 123123 out.close(); 124124 125125 System.out.println(); 126126 System.out.println(cert); 127127 System.out.println(); 128128 System.out 129129 .println("Added certificate to keystore 'jssecacerts' using alias '" 130130 + alias + "'"); 131131 } 132132 133133 private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray(); 134134 135135 private static String toHexString(byte[] bytes) { 136136 StringBuilder sb = new StringBuilder(bytes.length * 3); 137137 for (int b : bytes) { 138138 b &= 0xff; 139139 sb.append(HEXDIGITS[b >> 4]); 140140 sb.append(HEXDIGITS[b & 15]); 141141 sb.append(' '); 142142 } 143143 return sb.toString(); 144144 } 145145 146146 private static class SavingTrustManager implements X509TrustManager { 147147 148148 private final X509TrustManager tm; 149149 private X509Certificate[] chain; 150150 151151 SavingTrustManager(X509TrustManager tm) { 152152 this.tm = tm; 153153 } 154154 155155 @Override 156156 public X509Certificate[] getAcceptedIssuers() { 157157 return new X509Certificate[0]; 158158 //throw new UnsupportedOperationException(); 159159 } 160160 161161 public void checkClientTrusted(X509Certificate[] chain, String authType) 162162 throws CertificateException { 163163 throw new UnsupportedOperationException(); 164164 } 165165 166166 public void checkServerTrusted(X509Certificate[] chain, String authType) 167167 throws CertificateException { 168168 this.chain = chain; 169169 tm.checkServerTrusted(chain, authType); 170170 } 171171 } 172172 173173 }

javac InstallCert.java

java InstallCert www.\*\*\*.com:xx

                                网址       端口

xml配置:

1<!-- 发送邮件 --> 2 <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 3 <property name="host" value="${mail.host}"/> 4 <property name="javaMailProperties"> 5 <props> 6 <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> 7 <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> 8 <prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop> 9 <prop key="mail.smtp.socketFactory.port">${mail.smtp.socketFactory.port}</prop> 10 <prop key="mail.smtp.socketFactory.class">${mail.smtp.socketFactory.class}</prop> 11 <prop key="mail.smtp.socketFactory.fallback">${mail.smtp.socketFactory.fallback}</prop> 12 <!--<prop key="javax.net.ssl.trustStore">${javax.net.ssl.trustStore}</prop>--> 13 </props> 14 </property> 15 <property name="username" value="${mail.username}"/> 16 <property name="password" value="${mail.password}"/> 17 <property name="port" value="${mail.port}"/> 18 <property name="protocol" value="${mail.protocol}"/> 19 <property name="defaultEncoding" value="UTF-8"/> 20 </bean>

然后将生成的jssecacerts文件放在%JAVA_HOME%\jre\lib\security目录下,重启web服务即可

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )