解决邮件发送邮件的问题unable to find valid certification path to requested target

时间:2025-04-16 14:14:47
  • /* 
  •  * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved. 
  •  * 
  •  * Redistribution and use in source and binary forms, with or without 
  •  * modification, are permitted provided that the following conditions 
  •  * are met: 
  •  * 
  •  *   - Redistributions of source code must retain the above copyright 
  •  *     notice, this list of conditions and the following disclaimer. 
  •  * 
  •  *   - Redistributions in binary form must reproduce the above copyright 
  •  *     notice, this list of conditions and the following disclaimer in the 
  •  *     documentation and/or other materials provided with the distribution. 
  •  * 
  •  *   - Neither the name of Sun Microsystems nor the names of its 
  •  *     contributors may be used to endorse or promote products derived 
  •  *     from this software without specific prior written permission. 
  •  * 
  •  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
  •  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
  •  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  •  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
  •  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  •  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  •  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  •  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
  •  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
  •  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
  •  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  •  */  
  •   
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import .X509Certificate;  
  •   
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import .X509TrustManager;  
  •   
  • public class InstallCert {  
  •   
  •     public static void main(String[] args) throws Exception {  
  •         String host;  
  •         int port;  
  •         char[] passphrase;  
  •         if (( == 1) || ( == 2)) {  
  •             String[] c = args[0].split(":");  
  •             host = c[0];  
  •             port = ( == 1) ? 443 : (c[1]);  
  •             String p = ( == 1) ? "changeit" : args[1];  
  •             passphrase = ();  
  •         } else {  
  •               
  •                     .println("Usage: java InstallCert <host>[:port] [passphrase]");  
  •             return;  
  •         }  
  •   
  •         File file = new File("jssecacerts");  
  •         if (() == false) {  
  •             char SEP = ;  
  •             File dir = new File(("") + SEP + "lib"  
  •                     + SEP + "security");  
  •             file = new File(dir, "jssecacerts");  
  •             if (() == false) {  
  •                 file = new File(dir, "cacerts");  
  •             }  
  •         }  
  •         ("Loading KeyStore " + file + "...");  
  •         InputStream in = new FileInputStream(file);  
  •         KeyStore ks = (());  
  •         (in, passphrase);  
  •         ();  
  •   
  •         SSLContext context = ("TLS");  
  •         TrustManagerFactory tmf = TrustManagerFactory  
  •                 .getInstance(());  
  •         (ks);  
  •         X509TrustManager defaultTrustManager = (X509TrustManager) tmf  
  •                 .getTrustManagers()[0];  
  •         SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);  
  •         (nullnew TrustManager[] { tm }, null);  
  •         SSLSocketFactory factory = ();  
  •   
  •           
  •                 .println("Opening connection to " + host + ":" + port + "...");  
  •         SSLSocket socket = (SSLSocket) (host, port);  
  •         (10000);  
  •         try {  
  •             ("Starting SSL handshake...");  
  •             ();  
  •             ();  
  •             ();  
  •             ("No errors, certificate is already trusted");  
  •         } catch (SSLException e) {  
  •             ();  
  •             ();  
  •         }  
  •   
  •         X509Certificate[] chain = ;  
  •         if (chain == null) {  
  •             ("Could not obtain server certificate chain");  
  •             return;  
  •         }  
  •   
  •         BufferedReader reader = new BufferedReader(new InputStreamReader(  
  •                 ));  
  •   
  •         ();  
  •         ("Server sent " +  + " certificate(s):");  
  •         ();  
  •         MessageDigest sha1 = ("SHA1");  
  •         MessageDigest md5 = ("MD5");  
  •         for (int i = 0; i < ; i++) {  
  •             X509Certificate cert = chain[i];  
  •             (" " + (i + 1) + " Subject "  
  •                     + ());  
  •             ("   Issuer  " + ());  
  •             (());  
  •             ("   sha1    " + toHexString(()));  
  •             (());  
  •             ("   md5     " + toHexString(()));  
  •             ();  
  •         }  
  •   
  •           
  •                 .println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");  
  •         String line = ().trim();  
  •         int k;  
  •         try {  
  •             k = (() == 0) ? 0 : (line) - 1;  
  •         } catch (NumberFormatException e) {  
  •             ("KeyStore not changed");  
  •             return;  
  •         }  
  •   
  •         X509Certificate cert = chain[k];  
  •         String alias = host + "-" + (k + 1);  
  •         (alias, cert);  
  •   
  •         OutputStream out = new FileOutputStream("jssecacerts");  
  •         (out, passphrase);  
  •         ();  
  •   
  •         ();  
  •         (cert);  
  •         ();  
  •           
  •                 .println("Added certificate to keystore 'jssecacerts' using alias '"  
  •                         + alias + "'");  
  •     }  
  •   
  •     private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();  
  •   
  •     private static String toHexString(byte[] bytes) {  
  •         StringBuilder sb = new StringBuilder( * 3);  
  •         for (int b : bytes) {  
  •             b &= 0xff;  
  •             (HEXDIGITS[b >> 4]);  
  •             (HEXDIGITS[b & 15]);  
  •             (' ');  
  •         }  
  •         return ();  
  •     }  
  •   
  •     private static class SavingTrustManager implements X509TrustManager {  
  •   
  •         private final X509TrustManager tm;  
  •         private X509Certificate[] chain;  
  •   
  •         SavingTrustManager(X509TrustManager tm) {  
  •             this.tm = tm;  
  •         }  
  •   
  •         public X509Certificate[] getAcceptedIssuers() {  
  •             throw new UnsupportedOperationException();  
  •         }  
  •   
  •         public void checkClientTrusted(X509Certificate[] chain, String authType)  
  •                 throws CertificateException {  
  •             throw new UnsupportedOperationException();  
  •         }  
  •   
  •         public void checkServerTrusted(X509Certificate[] chain, String authType)  
  •                 throws CertificateException {  
  •             this.chain = chain;  
  •             (chain, authType);  
  •         }  
  •     }  
  •   
  • }