国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JAVA客戶端導(dǎo)入證書(shū)來(lái)訪問(wèn)HTTPS的方法

這篇具有很好參考價(jià)值的文章主要介紹了JAVA客戶端導(dǎo)入證書(shū)來(lái)訪問(wèn)HTTPS的方法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

JAVA客戶端導(dǎo)入證書(shū)來(lái)訪問(wèn)HTTPS的方法

方法一(修改cacerts文件)

1、
java 把證書(shū)都放在了 D:\jdks\1.8\jre\lib\security 這個(gè)路徑下的cacerts 文件里面。

我們進(jìn)入jdk/bin這個(gè)路徑,使用keytool工具。

2、
輸入以下命令 keytool -import -aliias [證書(shū)名字] -keystore [cacerts路徑] -file [證書(shū)地址] 即可。

keytool -import -alias clientkey -file C:\ssl\xxx.pem -keystore D:\jdks\1.8\jre\lib\security\cacerts -trustcacerts

如果是自己的網(wǎng)站可以從服務(wù)商那里下載,如果是別人的網(wǎng)站那么需要從瀏覽器導(dǎo)出。

JAVA客戶端導(dǎo)入證書(shū)來(lái)訪問(wèn)HTTPS的方法

或者到方法二那里通過(guò)代碼生成證書(shū)。

3、
接下來(lái)輸入密鑰口令:changeit 。提示是否信任證書(shū)的時(shí)候輸入y,即可成功導(dǎo)入。

JAVA客戶端導(dǎo)入證書(shū)來(lái)訪問(wèn)HTTPS的方法


后續(xù)注意:

最后需要注意的是,證書(shū)是有時(shí)間限制的。記得看下證書(shū)的到期時(shí)間,下次還是需要更新的。

刪除原來(lái)的證書(shū),更新新證書(shū)的方法:

展示所有證書(shū)
keytool -list -keystore cacerts

刪除指定證書(shū)
keytool -delete -alias akazam_email -keystore cacerts

重新添加新證書(shū)
keytool -import -alias akazam_email -file akazam_email.cer -keystore cacerts -trustcacerts


原文:用HttpClient請(qǐng)求對(duì)方網(wǎng)站數(shù)據(jù)報(bào)unable to find valid certification path to requested target_xfjs

方法二(新增jssecacerts證書(shū)文件)

首先也是下載訪問(wèn)的SSL站點(diǎn)的證書(shū)。

寫(xiě)一個(gè)安全程序?qū)iT用于獲取安全證書(shū):

/*
 * 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.*;
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 <host>[: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);
    }
    }
 
}

將代碼保存為InstallCert.java文件,并通過(guò)javac InstallCert.java 命令編譯Java程序

執(zhí)行 java InstallCert hostname 命令,如:java InstallCert 192.168.1.137:8443(要訪問(wèn)的目標(biāo)程序的IP地址和端口)或者是java InstallCert baidu.com:443,然后會(huì)看到如下信息:

java InstallCert ecc.fedora.redhat.com
Loading KeyStore /usr/jdk/instances/jdk1.5.0/jre/lib/security/cacerts...
Opening connection to ecc.fedora.redhat.com:443...
Starting SSL handshake...
 
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:150)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1476)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:846)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:815)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1025)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1038)
at InstallCert.main(InstallCert.java:63)
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:221)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:145)
at sun.security.validator.Validator.validate(Validator.java:203)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:172)
at InstallCert$SavingTrustManager.checkServerTrusted(InstallCert.java:158)
at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContextImpl.java:320)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:839)
... 7 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:236)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:194)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:216)
... 13 more
 
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,然后會(huì)在相應(yīng)的目錄下產(chǎn)生一個(gè)名為‘jssecacerts’的證書(shū),將證書(shū)copy到$JAVA_HOME/jre/lib/security目錄下,

或者通過(guò)執(zhí)行:

System.setProperty("javax.net.ssl.trustStore", "D:\\UTA\\DOC_E_Health_XML\\Keystore\\jssecacerts

重啟程序即可解決。

來(lái)源:解決 sun.security.validator.ValidatorException: PKIX path building failed文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-416183.html

到了這里,關(guān)于JAVA客戶端導(dǎo)入證書(shū)來(lái)訪問(wèn)HTTPS的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java后臺(tái)獲取客戶端ip與服務(wù)器ip的方法

    1.可以用 RestTemplate 發(fā)送http請(qǐng)求

    2024年02月11日
    瀏覽(31)
  • Kubernetes客戶端認(rèn)證——基于CA證書(shū)的雙向認(rèn)證方式

    Kubernetes客戶端認(rèn)證——基于CA證書(shū)的雙向認(rèn)證方式

    Kubernetes集群的訪問(wèn)權(quán)限控制由API Server負(fù)責(zé),API Server的訪問(wèn)權(quán)限控制由身份驗(yàn)證(Authentication)、授權(quán)(Authorization)和準(zhǔn)入控制(Admission control)三個(gè)步驟組成,這個(gè)三個(gè)步驟是按序進(jìn)行的(詳細(xì)介紹請(qǐng)參見(jiàn)《(轉(zhuǎn))使用kubectl訪問(wèn)Kubernetes集群時(shí)的身份驗(yàn)證和授權(quán)》)。 其中身份驗(yàn)證

    2023年04月10日
    瀏覽(22)
  • QT充當(dāng)客戶端模擬瀏覽器等第三方客戶端對(duì)https進(jìn)行雙向驗(yàn)證

    QT充當(dāng)客戶端模擬瀏覽器等第三方客戶端對(duì)https進(jìn)行雙向驗(yàn)證

    在 ssl單向證書(shū)和雙向證書(shū)校驗(yàn)測(cè)試及搭建流程 文章中,已經(jīng)做了基于https的單向認(rèn)證和雙向認(rèn)證,,, 在進(jìn)行雙向認(rèn)證時(shí),采用的是curl工具或?yàn)g覽器充當(dāng)客戶端去驗(yàn)證。 此次采用QT提供的接口去開(kāi)發(fā)客戶端向服務(wù)器發(fā)送請(qǐng)求,來(lái)驗(yàn)證https的雙向認(rèn)證流程。 依然以 ssl單向證書(shū)

    2024年02月14日
    瀏覽(95)
  • opensssl BIO方式https客戶端

    廢話不多說(shuō),代碼中使用了兩種https客戶端的實(shí)現(xiàn)方式。

    2024年01月19日
    瀏覽(35)
  • openssl自簽名CA根證書(shū)、服務(wù)端和客戶端證書(shū)生成并模擬單向/雙向證書(shū)驗(yàn)證

    1.1 生成CA證書(shū)私鑰 openssl genrsa -aes256 -out ca.key 2048 1.2 取消密鑰的密碼保護(hù) openssl rsa -in ca.key -out ca.key 1.3 生成根證書(shū)簽發(fā)申請(qǐng)文件(csr文件) openssl req -new -sha256 -key ca.key -out ca.csr -subj \\\"/C=CN/ST=FJ/L=XM/O=NONE/OU=NONE/CN=localhost/emailAddress=test@test.com\\\" 上述參數(shù)含義 req----執(zhí)行證書(shū)簽發(fā)命令

    2024年04月25日
    瀏覽(27)
  • 【分布式技術(shù)專題】「OSS中間件系列」Minio的文件服務(wù)的存儲(chǔ)模型及整合Java客戶端訪問(wèn)的實(shí)戰(zhàn)指南

    【分布式技術(shù)專題】「OSS中間件系列」Minio的文件服務(wù)的存儲(chǔ)模型及整合Java客戶端訪問(wèn)的實(shí)戰(zhàn)指南

    Minio的元數(shù)據(jù) 數(shù)據(jù)存儲(chǔ) MinIO對(duì)象存儲(chǔ)系統(tǒng)沒(méi)有元數(shù)據(jù)數(shù)據(jù)庫(kù),所有的操作都是對(duì)象級(jí)別的粒度的,這種做法的優(yōu)勢(shì)是: 個(gè)別對(duì)象的失效,不會(huì)溢出為更大級(jí)別的系統(tǒng)失效。 便于實(shí)現(xiàn)\\\"強(qiáng)一致性\\\"這個(gè)特性。此特性對(duì)于機(jī)器學(xué)習(xí)與大數(shù)據(jù)處理非常重要。 數(shù)據(jù)管理 元數(shù)據(jù)與數(shù)據(jù)一起

    2024年02月11日
    瀏覽(21)
  • openssl SM2(ECC)自簽服務(wù)端和客戶端證書(shū)

    參考文章:https://www.golinuxcloud.com/openssl-generate-ecc-certificate/#5_Create_CA_certificate_with_ECC_Key (228條消息) openssl 制作SM2多級(jí)證書(shū)鏈_酷ying的博客-CSDN博客_openssl sm2 sm3 csr 1、在當(dāng)前目錄創(chuàng)建存儲(chǔ)證書(shū)文件夾,配置openssl.cnf所需要的文件,將openssl.cnf文件放到當(dāng)前目錄(編譯openssl源碼包會(huì)

    2024年02月11日
    瀏覽(22)
  • ESP8266-Arduino網(wǎng)絡(luò)編程實(shí)例-HTTPS客戶端數(shù)據(jù)請(qǐng)求

    超文本傳輸協(xié)議安全 (HTTPS) 是 HTTP的安全版本,HTTP 是用于在 Web 瀏覽器和網(wǎng)站之間發(fā)送數(shù)據(jù)的主要協(xié)議。HTTPS 經(jīng)過(guò)加密,以提高數(shù)據(jù)傳輸?shù)陌踩浴.?dāng)用戶傳輸敏感數(shù)據(jù)(例如通過(guò)登錄銀行賬戶、電子郵件服務(wù)或健康保險(xiǎn)提供商)時(shí),這一點(diǎn)尤其重要。 從技術(shù)上來(lái)講,HTTPS

    2023年04月08日
    瀏覽(18)
  • Config:客戶端連接服務(wù)器訪問(wèn)遠(yuǎn)程

    Config:客戶端連接服務(wù)器訪問(wèn)遠(yuǎn)程

    springcloud-config: springcloud-config push ? ?pom ? ? ?

    2024年02月11日
    瀏覽(28)
  • Windows Kerberos客戶端配置并訪問(wèn)CDH

    Windows Kerberos客戶端配置并訪問(wèn)CDH

    安裝 Kerberos 客戶端 配置 hosts 1、配置集群 hosts 到 Windows( C:WindowsSystem32driversetchosts ); 2、調(diào)整windows環(huán)境變量,將系統(tǒng)環(huán)境變量 PATH 中的 C:Program FilesMITKerberosbin 放置在最前邊,建議放在 JDK 路徑之前; 3、驗(yàn)證:需能 ping 通 kdc 機(jī)器域名和 IP 地址 下載 MIT Kerberos 鏈接:

    2024年02月09日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包