java生成一張數字證書,數字證書製作流程

本文目錄一覽:

數字簽名和數字證書

數字簽名是一種用於信息 真實性 和 完整性 校驗的手段,一套數字簽名包含簽名和驗證兩種運算。下面是一套簡單的數字簽名示意圖。

數字簽名使用 非對稱加密 技術。每個人都有一對鑰匙,私鑰只有本人知道,公鑰公開,私鑰簽名,公鑰驗簽。

在進行信息傳遞時,信息發送者用私鑰生成簽名並將公鑰一起發送給信息接收者,接收者使用公鑰驗簽。上述過程中信息完整性得到校驗,但發送者的身份是否合法無法得知(因為任何人都可以聲稱自己是合法的),因此引入了 身份認證機構 。

身份認證機構是 信息接收者 能信任的機構,所有的公鑰必須向該機構進行註冊。註冊後身份認證機構給發送者頒發一 數字證書 。對文件簽名後,發送者把此數字證書連同文件及簽名一起發給信息接收者,接收者向身份認證機構求證是否真地是用發送者密鑰簽發的文件。

數字證書是一種電子檔案,用來證明公鑰擁有者的身份。此檔案包含了公鑰信息、擁有者身份信息(主體)、以及數字證書認證機構(發行者)對該文件的數字簽名。

證書的本質就是對公鑰加數字簽名,認證機構用自己的私鑰對需要認證的人(或組織機構)的公鑰進行數字簽名並生成證書。

我們需要了解以下幾種類型的證書

自簽證書

用戶可以自己生成數字證書,不過沒有任何可信賴的人簽名,它主要用於小範圍測試,這種自簽名證書通常不會被廣泛信任,使用時可能會遇到電腦軟體的安全警告。

根證書

根證書獲得廣泛認可,通常已預先安裝在各種軟體(包括操作系統、瀏覽器、電郵軟體等),作為信任鏈的起點,來自於公認可靠的政府機關、證書頒發機構公司、非營利組織等,與各大軟體商透過嚴謹的核認程序才在不同的軟體廣泛部署。由於部署程序複雜費時,需要行政人員的授權及機構法人身份的核認,一張根證書有效期可能長達二十年以上。在某些企業,也可能會在內部電腦自行安裝企業自簽的根證書,以支援內部網的企業級軟體;但是這些證書可能未被廣泛認可,只在企業內部適用。

中介證書

認證機構的一個重要任務就是為客戶簽發證書,雖然廣泛認可的認證機構都已擁有根證書,相對應的私鑰可用以簽署其他證書,但因為密鑰管理和行政考慮,一般會先行簽發中介證書,才為客戶作數位簽署。中介證書的有效期會較根證書為短,並可能對不同類別的客戶有不同的中介證書作分工。

TLS伺服器證書

網站在互聯網上提供服務時,域名就是伺服器證書上主體,相關機構名稱則寫在組織或單位一欄上。證書和私鑰會安裝在伺服器。客戶端的軟體(如瀏覽器)會執行認證路徑驗證算(Certification path validation algorithm)以確保安全,如果未能肯定加密通道是否安全(例如證書上的主體名稱不對應網站域名、伺服器使用了自簽證書、或加密演算法不夠強),可能會警告用戶。

TLS客戶端證書

客戶端證書包含電子郵件地址或個人姓名,而不是主機名。客戶端證書比較不常見,因為考慮到技術門檻及成本因素,通常都是由服務提供者驗證客戶身份,而不是依賴第三方認證機構。通常,需要使用到客戶端證書的服務都是內部網的企業級軟體,他們會設立自己的內部根證書,由企業的技術人員在企業內部的電腦安裝相關客戶端證書以便使用。在公開的互聯網,大多數網站都是使用登入密碼和Cookie來驗證用戶,而不是客戶端證書。

根證書(自簽證書)、中介證書和終端實體(TLS伺服器/客戶端)證書的形成如下信任鏈

證書一般遵從X.509格式規範

證書可以二進位或 Base64 形式儲存,常見的文件擴展名有.cer、.crt、.der和.pem。如果把證書和私鑰一起儲存,則可以使用PKCS#12(.p12)格式。

我們在寫對外 API 時,針對信息傳遞的安全考慮,做如下設計

我們使用 SHA256withRSA 進行簽名,下面是一個Java簡單例子

1,java生成數字證書為什麼會出現下圖情況?我先說一下我是怎麼做的。請高手指點

你配置的是單向SSL,tomcat不會對用戶身份作出驗證。只是在tomcat和瀏覽器之間建立了SSL通道。身份驗證部分還得自己寫。

用openssl 和 keytool 生成 SSL證書

SSL(Secure Sockets Layer (SSL) and Transport Layer Security (TLS))被設計為加強Web安全傳輸(HTTP/HTTPS/)的協議(事實上還有SMTP/NNTP等) ,默認使用443埠

openssl 適用範圍廣。

keytool 單獨針對 java application

數字證書是現代互聯網中個體間相互信任的基石。

如果沒有了數字證書,那麼也就沒有了各式各樣的電商平台以及方便的電子支付服務。目前我們所提到的數字證書都是基於 ITU 制定的 X.509 標準。

簡單來說,數字證書就是一張附帶了數字簽名的信息表。

x509證書一般會用到三類文件,key,csr,crt。

Key是私用密鑰,openssl格式,通常是rsa演算法。

csr是證書請求文件(certificate signing request),用於申請證書。在製作csr文件的時候,必須使用自己的私鑰來簽署申請,還可以設定一個密鑰。

crt是CA認證後的證書文件(certificate),簽署人用自己的key給你簽署的憑證。

CA根證書的生成步驟

生成CA私鑰(.key)–生成CA證書請求(.csr)–自簽名得到根證書(.crt)(CA給自已頒發的證書)。

本質上就是用私鑰去獲取證書,然後把這兩個文件一起放到server,以此來證明 我就是我 。

上面是互動式輸入,非交互的方式如下

自簽名是免費/測試的證書,瀏覽器默認不認可。

通常的方法是:提交CSR到證書公司(比如VeriSign,Inc),等對方發來證書。(當然這是要花錢的)

比如Nginx伺服器,把 ca.key 和 ca.crt 放到 /etc/nginx/certs 目錄。修改/etc/nginx/nginx.conf

重啟服務生效

引入一個概念:SAN

SAN stands for 「 Subject Alternative Names 」 and this helps you to have a single certificate for multiple CN (Common Name).

簡而言之,用SAN是為了省錢,一個證書給多個網址使用。如果用之前的交互方式來申請證書,根本沒有地方來輸入SAN,要解決這問題,需用到配置文件。

The entries in SAN certificate:

Create new Private Key and Certificate Signing Request

生成 private key 和 生成 CSR 合併成一步

例子

於是 ca.csr ca.key 都生成了,csr 用於申請證書。

Keytool 是一個Java數據證書的管理工具 , Keytool將密鑰(key)和證書(certificates)存在一個稱為keystore的文件中。

這是java專用方式,過程跟openssl 類似。

伺服器配置可以使用私鑰+證書合併在一起的文件,如jks或者pkcs12文件,這類文件一般叫key.keystore。(openssl使用兩個文件)

(openssl 自簽名參考上面)

測試階段,也可以用keytool 來實現自簽名(根據證書請求生成證書)。

用 jenkins 來舉例

查看單個證書

列出keystore存在的所有證書

使用別名查看keystore特定條目

刪除keystore裡面指定證書

更改keysore密碼

導出keystore裡面的指定證書

JAVA 如何生成證書

下面產生一個自簽證書。安裝完J2SDK(這裡用的是J2SDK1.4)後,在J2SDK安裝目錄的bin目錄下,有一個keytool的可執行程序。利用keytool產生自簽證書的步驟如下:

第一步,用-genkey命令選項,產生公私密鑰對。在控制台界面輸入:keytool -genkey -alias testkeypair -keyalg RSA -keysize 1024 -sigalg MD5withRSA。這裡的-alias表示使用這對公私密鑰產生新的keystore入口的別名(keystore是用來存放管理密鑰對和證書鏈的,預設位置是在使用者主目錄下,以.keystore為名的隱藏文件,當然也可指定某個路徑存放.keystore文件);-keyalg是產生公私鑰對所用的演算法,這裡是RSA;-keysize定義密鑰的長度;-sigalg是簽名演算法,選擇MD5withRSA,即用RSA簽名,然後用MD5哈希演算法摘要。接下來,系統會提示進行一些輸入:

輸入keystore密碼: abc123

您的名字與姓氏是什麼?

[Unknown]: Li

您的組織單位名稱是什麼?

nbs

問題的其他解決辦法參考 :

;t=JAVA+

如何用Java調用Openssl生成一個數字證書

openssl genrsa -des3 -out server.key 1024運行時會提示輸入密碼,此密碼用於加密key文件(參數des3便是指加密演算法,當然也可以選用其他你認為安全的演算法.),以後每當需讀取此文件(通過openssl提供的命令或API)都需輸入口令.如果覺得不方便,也可以..

java生成數字證書以及驗證數字證書的問題

數字證書有很多種,如果X509,

事實上,java.security 可以完成的。先掌握概念,做起來並不難。也可以百度得到。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193335.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-01 15:00
下一篇 2024-12-01 15:00

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論