本文目錄一覽:
- 1、數字簽名和數字證書
- 2、1,java生成數字證書為什麼會出現下圖情況?我先說一下我是怎麼做的。請高手指點
- 3、用openssl 和 keytool 生成 SSL證書
- 4、JAVA 如何生成證書
- 5、如何用Java調用Openssl生成一個數字證書
- 6、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-hant/n/193335.html