帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
java 服务器获取https证书的问题 sun.security.validator.ValidatorException- PKIX path building failed-
发布时间:2024-03-06 07:28:10   分类:帮助文档
java 服务器获取https证书的问题 sun.security.validator.ValidatorException: PKIX path building failed: 1 新建一个InstallCert .java 类   import java.io.*; import java.net.URL;   import java.security.*; import java.security.cert.*;   import javax.net.ssl.*;   public class InstallCert {       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 [:port] [passphrase]");         return;     }       File file = new File("jssecacerts");     if (file.isFile() == false) {         char SEP = File.separatorChar;         File dir = new File(System.getProperty("java.home") + SEP             + "lib" + SEP + "security");         file = new File(dir, "jssecacerts");         if (file.isFile() == false) {         file = new File(dir, "cacerts");         }     }     System.out.println("Loading KeyStore " + file + "...");     InputStream in = new FileInputStream(file);     KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());     ks.load(in, passphrase);     in.close();       SSLContext context = SSLContext.getInstance("TLS");     TrustManagerFactory tmf =         TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());     tmf.init(ks);     X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];     SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);     context.init(null, new TrustManager[] {tm}, null);     SSLSocketFactory factory = context.getSocketFactory();       System.out.println("Opening connection to " + host + ":" + port + "...");     SSLSocket socket = (SSLSocket)factory.createSocket(host, port);     socket.setSoTimeout(10000);     try {         System.out.println("Starting SSL handshake...");         socket.startHandshake();         socket.close();         System.out.println();         System.out.println("No errors, certificate is already trusted");     } catch (SSLException e) {         System.out.println();         e.printStackTrace(System.out);     }       X509Certificate[] chain = tm.chain;     if (chain == null) {         System.out.println("Could not obtain server certificate chain");         return;     }       BufferedReader reader =         new BufferedReader(new InputStreamReader(System.in));       System.out.println();     System.out.println("Server sent " + chain.length + " certificate(s):");     System.out.println();     MessageDigest sha1 = MessageDigest.getInstance("SHA1");     MessageDigest md5 = MessageDigest.getInstance("MD5");     for (int i = 0; i < chain.length; i++) {         X509Certificate cert = chain[i];         System.out.println             (" " + (i + 1) + " Subject " + cert.getSubjectDN());         System.out.println("   Issuer  " + cert.getIssuerDN());         sha1.update(cert.getEncoded());         System.out.println("   sha1    " + toHexString(sha1.digest()));         md5.update(cert.getEncoded());         System.out.println("   md5     " + toHexString(md5.digest()));         System.out.println();     }       System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");     String line = reader.readLine().trim();     int k;     try {         k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;     } catch (NumberFormatException e) {         System.out.println("KeyStore not changed");         return;     }       X509Certificate cert = chain[k];     String alias = host + "-" + (k + 1);     ks.setCertificateEntry(alias, cert);       OutputStream out = new FileOutputStream("jssecacerts");     ks.store(out, passphrase);     out.close();       System.out.println();     System.out.println(cert);     System.out.println();     System.out.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(bytes.length * 3);     for (int b : bytes) {         b &= 0xff;         sb.append(HEXDIGITS[b >> 4]);         sb.append(HEXDIGITS[b & 15]);         sb.append(' ');     }     return sb.toString();     }       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;         tm.checkServerTrusted(chain, authType);     }     }   } 2 放到服务器上随便一个文件夹就行 ,然后javac InstallCert .java 生成class文件 3 执行文件 java InstallCert 你的网址 ,例如  java InstallCert 192.168.1.137:8443 运行到如下结果   Server sent 2 certificate(s): 1 Subject CN=ecc.fedora.redhat.com, O=example.com, C=US Issuer CN=Certificate Shack, O=example.com, C=US sha1 2e 7f 76 9b 52 91 09 2e 5d 8f 6b 61 39 2d 5e 06 e4 d8 e9 c7 md5 dd d1 a8 03 d7 6c 4b 11 a7 3d 74 28 89 d0 67 54 2 Subject CN=Certificate Shack, O=example.com, C=US Issuer CN=Certificate Shack, O=example.com, C=US sha1 fb 58 a7 03 c4 4e 3b 0e e3 2c 40 2f 87 64 13 4d df e1 a1 a6 md5 72 a0 95 43 7e 41 88 18 ae 2f 6d 98 01 2c 89 68 Enter certificate to add to trusted keystore or 'q' to quit: [1] 直接输入1 会在相应的文件夹下生成 jssecacerts证书  然后将证书放到 将证书copy到$JAVA_HOME/jre/lib/security目录下 ,重起程序就会生效
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价