亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java SSL與TLS客戶端證書配置方式

 更新時間:2024年01月23日 10:30:16   作者:茅坤寶駿氹  
這篇文章主要介紹了Java SSL與TLS客戶端證書配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、TLS安全概念

(1)PKI

PKI是 Public Key Infrastructure的簡稱,意思是公鑰基礎設施。

公鑰基礎設施是提供公鑰加密和數(shù)字簽名服務的系統(tǒng)或平臺,目的是為了管理密鑰和證書。通過證書和秘鑰來確認通訊雙方是否可信任。

(2)CA

CA是Certificate Authority的簡稱,即證書的簽發(fā)機構,它是PKI的核心。

正常情況來說,CA是具有權威性的機構,通過CA獲取證書需要給錢。

但是有的時候可能不想用CA機構的證書,又想要使用https站點,那么可能就需要自己生成證書,但是這種證書瀏覽器是認為不安全的,本文檔后邊的具體步驟即針對這種場景。

(3)https

https是http+ssl,通俗點說,就是采用http通訊的安全傳輸協(xié)議,用來保證http傳輸過程中數(shù)據(jù)的機密性、完整性和可靠性,ssl需要證書。

(4)單向認證

網絡通訊是雙向的,但是安全認證不一定都是雙向。大多數(shù)情況下可能都是單向的,只需要客戶端確認服務端是可靠的,而服務端不管客戶端是否可靠。

即客戶端,比如瀏覽器會驗證服務端證書,服務端不需要客戶端證書。

(5)雙向認證

雙向認證相對于單向認證,即客戶端需要確認服務端是否可信,服務端也需要確認客戶端是否可信。

雙方都要驗證對方的證書

(6)SSL 

 Secure Sockets Layer,一種加密協(xié)議規(guī)范,如https就使用它進行加解密

(7)OpenSSL

一種ssl規(guī)范的實現(xiàn),可以幫助我們生成解析各類證書

(8)X.509

證書標準,比如證書應該包含哪些信息

(9)PEM

Privacy Enhanced Mail,一種編碼格式,常用于Apache和UNIX服務器,查看證書信息:openssl x509 -in certificate.pem -text -noout

(10)DER

Distinguished Encoding Rules,一種編碼格式,常用于Java和Windows服務器,查看證書的信息:openssl x509 -in certificate.der -inform der -text -noout

(11)CRT

certificate,證書文件,常見于UNIX系統(tǒng),大多應是PEM編碼

(12)CER

certificate,證書文件,常見于Windows系統(tǒng),大多應是DER編碼.

(13)KEY

通常用來存放一個公鑰或者私鑰,查看不同編碼格式文件內容

(14)CSR

Certificate Signing Request,即證書簽名請求,這個并不是證書,而是向權威證書頒發(fā)機構獲得簽名證書的申請,查看方法:openssl req -noout -text -in my.csr (DER格式同上后面加上-inform der)

(15)PFX/P12

predecessor of PKCS#12,對Unix服務器來說,一般CRT和KEY是分開存放在不同文件中的,但Windows的IIS則將它們存在一個PFX文件中,因此這個文件包含了證書及私鑰。

(16)JKS

Java Key Storage,跟OpenSSL關系不大,Java的keytool工具可以將PFX轉為JKS,也能直接生成JKS

二、證書存儲格式

1、pem格式:pem、crt、key后綴。編碼方式base64,key使用pkcs1、pkcs8格式存儲

2、p12(通用的證書存儲格式)

3、jks(java的證書存儲格式,依賴jdk版本,小版本差異會報錯)

三、證書客戶端設置

KeyManager是提供客戶端證書管理,TrustManager是信任服務端證書管理

(1)單向認證

        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        FileInputStream caInputStream = new FileInputStream(caPath);
        List<X509Certificate> caList =  certificateFactory.generateCertificates(caInputStream).stream().map(v->
                (X509Certificate)v).collect(Collectors.toList());
        KeyStore keystore = KeyStore.getInstance("JKS");
        keystore.load(null, null);
        for(X509Certificate ca: caList)
           keystore.setCertificateEntry(ca.getSubjectDN().getName(), ca);
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");
        tmf.init(keystore);
 
        SSLContext context = SSLContext.getInstance("TLS");
        context.init(null, tmf.getTrustManagers(), new SecureRandom());

(2)雙向認證

   private void sslContext() {
       // 初始化密鑰庫
        KeyManagerFactory keyManagerFactory = KeyManagerFactory
                .getInstance("SunX509");
        KeyStore keyStore = getKeyStore("client.jks", "123456", "PKCS12");
        keyManagerFactory.init(keyStore, "123456".toCharArray());
        // 初始化信任庫
        TrustManagerFactory trustManagerFactory = TrustManagerFactory
                .getInstance("SunX509");
        KeyStore trustkeyStore = getKeyStore("server.jks", "123456", "JKS");
        trustManagerFactory.init(trustkeyStore);
        // 初始化SSL上下文
        SSLContext ctx = SSLContext.getInstance("SSL");
        ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory
                .getTrustManagers(), null);
 
    }
 
    private  KeyStore getKeyStore(String keyStorePath, String password, String type)
            throws Exception {
 
        FileInputStream is = new FileInputStream(keyStorePath);
        KeyStore ks = KeyStore.getInstance(type);
        ks.load(is, password.toCharArray());
        is.close();
        return ks;
    }

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 智能 AI 代碼生成工具 Cursor 安裝和使用超詳細教程

    智能 AI 代碼生成工具 Cursor 安裝和使用超詳細教程

    Cursor.so 是一個集成了 GPT-4 的國內直接可以訪問的,優(yōu)秀而強大的免費代碼生成器,可以幫助你快速編寫、編輯和討論代碼,這篇文章主要介紹了智能 AI 代碼生成工具 Cursor 安裝和使用介紹,需要的朋友可以參考下
    2023-05-05
  • java中join方法的理解與說明詳解

    java中join方法的理解與說明詳解

    這篇文章主要給大家介紹了關于java中join方法的理解與說明的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Java趣味練習題之輸出兩個日期之間的相隔天數(shù)

    Java趣味練習題之輸出兩個日期之間的相隔天數(shù)

    本篇文章介紹了我看到的一個趣味小題目,怎么求得兩個日期之間相隔的天數(shù),以及解決該題目的過程及思路,通讀本篇對大家的學習或工作具有一定的價值,需要的朋友可以參考下
    2021-10-10
  • SpringBoot 進行限流的操作方法

    SpringBoot 進行限流的操作方法

    限流是對某一時間窗口內的請求數(shù)進行限制,保持系統(tǒng)的可用性和穩(wěn)定性,防止因流量暴增而導致的系統(tǒng)運行緩慢或宕機。本文重點給大家介紹SpringBoot 進行限流的操作方法,感興趣的朋友一起看看吧
    2021-10-10
  • MyBatis的動態(tài)SQL語句實現(xiàn)

    MyBatis的動態(tài)SQL語句實現(xiàn)

    這篇文章主要介紹了MyBatis的動態(tài)SQL語句實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Java實現(xiàn)AES加密算法的簡單示例分享

    Java實現(xiàn)AES加密算法的簡單示例分享

    這篇文章主要介紹了Java實現(xiàn)AES加密算法的簡單示例分享,AES算法是基于對密碼值的置換和替代,需要的朋友可以參考下
    2016-04-04
  • Springboot jpa @Column命名大小寫問題及解決

    Springboot jpa @Column命名大小寫問題及解決

    這篇文章主要介紹了Springboot jpa @Column命名大小寫問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java Volatile關鍵字你真的了解嗎

    Java Volatile關鍵字你真的了解嗎

    這篇文章主要為大家介紹了Java Volatile關鍵字,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 簡單了解java ibatis #及$的區(qū)別和用法

    簡單了解java ibatis #及$的區(qū)別和用法

    這篇文章主要介紹了簡單了解java ibatis #及$的區(qū)別和用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • struts1之ActionServlet詳解_動力節(jié)點Java學院整理

    struts1之ActionServlet詳解_動力節(jié)點Java學院整理

    這篇文章主要介紹了struts1之ActionServlet詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論