摘要:解決的問(wèn)題問(wèn)題描述這兩天上測(cè)試服務(wù)器的時(shí)候突然報(bào)這樣的異常問(wèn)題的根本訪問(wèn)的時(shí)候缺少安全證書(shū),導(dǎo)致的錯(cuò)誤解決措施將安全證書(shū)下載到本地。輸入等待程序執(zhí)行完成,當(dāng)前目錄下會(huì)生成一個(gè)的安全文件將證書(shū)拷貝到目錄下重新啟動(dòng)完成
解決PKIX:unable to find valid certification path to target 的問(wèn)題 問(wèn)題描述
這兩天上測(cè)試服務(wù)器的時(shí)候突然報(bào)這樣的異常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
問(wèn)題的根本訪問(wèn)https的時(shí)候缺少安全證書(shū),導(dǎo)致的錯(cuò)誤
解決措施將安全證書(shū)下載到本地 =.= 。查閱了很久的資料,找到如下一份大神的源碼特來(lái)分享
附上代碼/* * 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 java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.security.KeyStore; import java.security.MessageDigest; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLException; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; 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如何執(zhí)行[: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); } } }
1.首先將java文件編譯成class文件,使用javac命令 javac InstallCert.java
2.當(dāng)前目錄下即產(chǎn)生InstallCert.class文件以及InstallCert$SavingTrustManager.class文件
3.運(yùn)行InstallCert.class文件并傳入?yún)?shù),java InstallCert host:port 通過(guò)作者的源碼可以得知默認(rèn)端口為443
此時(shí)會(huì)輸出如下信息
G:com>java InstallCert www.baidu.com Loading KeyStore C:Program FilesJavajre1.8.0_191libsecuritycacerts... Opening connection to www.baidu.com:443... Starting SSL handshake... javax.net.ssl.SSLException: java.lang.UnsupportedOperationException at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.security.ssl.SSLSocketImpl.handleException(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at InstallCert.main(InstallCert.java:95) Caused by: java.lang.UnsupportedOperationException at InstallCert$SavingTrustManager.getAcceptedIssuers(InstallCert.java:18 0) at sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraint s(Unknown Source) at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(Unk nown Source) at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(Unkno wn Source) at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source) at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) at sun.security.ssl.Handshaker.processLoop(Unknown Source) at sun.security.ssl.Handshaker.process_record(Unknown Source) at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source ) ... 3 more Server sent 2 certificate(s): 1 Subject CN=baidu.com, O="Beijing Baidu Netcom Science Technology Co., Ltd", O U=service operation department, L=beijing, ST=beijing, C=CN Issuer CN=GlobalSign Organization Validation CA - SHA256 - G2, O=GlobalSign nv-sa, C=BE sha1 d6 aa f8 cf a0 e0 23 65 47 fc 2a 89 4f 89 5e c9 47 24 a6 0d md5 fd 63 96 dc 4e 9f 1e a9 16 51 d6 87 73 4d 39 76 2 Subject CN=GlobalSign Organization Validation CA - SHA256 - G2, O=GlobalSign nv-sa, C=BE Issuer CN=GlobalSign Root CA, OU=Root CA, O=GlobalSign nv-sa, C=BE sha1 90 2e f2 de eb 3c 5b 13 ea 4c 3d 51 93 62 93 09 e2 31 ae 55 md5 d3 e8 70 6d 82 92 ac e4 dd eb f7 a8 bb bd 56 6b Enter certificate to add to trusted keystore or "q" to quit: [1]
4.輸入q為退出,輸入1為下載。輸入1等待程序執(zhí)行完成,當(dāng)前目錄下會(huì)生成一個(gè)jssecacerts的安全文件
5.將證書(shū)拷貝到$JAVA_HOME/jre/lib/security目錄下
6.重新啟動(dòng)web server
完成~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/74032.html
摘要:甚至和百度的搜索結(jié)果也正在給予的網(wǎng)站更高的排名和優(yōu)先收錄權(quán)。由于預(yù)設(shè)的解碼器是,所以就不能識(shí)別中文。那理解了這個(gè)錯(cuò)誤原因后,我這邊首先想到的就是網(wǎng)站的配置文件中是否含有中文。打開(kāi)一看,確實(shí)存在中文注釋。 相關(guān)知識(shí) HTTP/HTTPS 是什么? 簡(jiǎn)單來(lái)說(shuō),HTTP 是一個(gè)傳輸網(wǎng)頁(yè)內(nèi)容的協(xié)議,比如我們?yōu)g覽一個(gè)網(wǎng)頁(yè),網(wǎng)頁(yè)上的文字、圖片、 CSS 、 JS 等文件都是通過(guò) HTTP 協(xié)議傳輸...
摘要:年月日微信支付團(tuán)隊(duì)向所有開(kāi)發(fā)者或者支付賬戶(hù)管理員發(fā)送了微信支付服務(wù)器將于年月日更換服務(wù)器的數(shù)字證書(shū),如果商戶(hù)平臺(tái)所在的服務(wù)器過(guò)于老舊或者缺少根證書(shū),屆時(shí)將會(huì)導(dǎo)致接口支付通信故障。 2018年3月14日微信支付團(tuán)隊(duì)向所有開(kāi)發(fā)者或者支付賬戶(hù)管理員發(fā)送了微信支付HTTPS服務(wù)器將于2018年5月29日更換服務(wù)器的SSL數(shù)字證書(shū),如果商戶(hù)平臺(tái)所在的服務(wù)器過(guò)于老舊或者缺少DigiCert根證書(shū),...
摘要:安全機(jī)制的設(shè)計(jì)現(xiàn)在,大部分的接口都采用架構(gòu),最重要的一個(gè)設(shè)計(jì)原則就是,客戶(hù)端與服務(wù)器的交互在請(qǐng)求之間是無(wú)狀態(tài)的,也就是說(shuō),當(dāng)涉及到用戶(hù)狀態(tài)時(shí),每次請(qǐng)求都要帶上身份驗(yàn)證信息。 App與服務(wù)器的通信接口如何設(shè)計(jì)得好,需要考慮的地方挺多的,在此根據(jù)我的一些經(jīng)驗(yàn)做一些總結(jié)分享,旨在拋磚引玉。 安全機(jī)制的設(shè)計(jì) 現(xiàn)在,大部分App的接口都采用RESTful架構(gòu),RESTFul最重要的一個(gè)設(shè)計(jì)原則就...
摘要:外貿(mào)網(wǎng)站通常訪客量大并且面向的多是海外客戶(hù),為了網(wǎng)站安全穩(wěn)定運(yùn)行,所以我們?cè)诖罱ňW(wǎng)站時(shí)會(huì)選擇高配置的海外服務(wù)器,常見(jiàn)的海外服務(wù)器包括美國(guó)服務(wù)器歐洲服務(wù)器日本服務(wù)器韓國(guó)服務(wù)器等。外貿(mào)建站一般要花多少錢(qián)?隨著跨境電商的興起,不少用戶(hù)會(huì)選擇外貿(mào)獨(dú)立站,即自己搭建個(gè)網(wǎng)站,方便國(guó)外客戶(hù)瀏覽。用戶(hù)在做外貿(mào)網(wǎng)站前,一般會(huì)對(duì)外貿(mào)獨(dú)立建站費(fèi)用做個(gè)預(yù)算,那么外貿(mào)建站需要花多少錢(qián)?費(fèi)用主要包括哪些方面?下面一起來(lái)...
閱讀 777·2023-04-25 15:49
閱讀 3205·2021-09-22 15:13
閱讀 1370·2021-09-07 10:13
閱讀 3536·2019-08-29 18:34
閱讀 2618·2019-08-29 15:22
閱讀 567·2019-08-27 10:52
閱讀 753·2019-08-26 18:27
閱讀 3104·2019-08-26 13:44