[java与https]第一篇、证书杂谈
一、算法、密鑰(對)、證書、證書庫
令狐沖是個馬場老板,這天,他接到店里伙計電話,說有人已經簽了租馬合同,準備到馬場提馬,,他二話不說,突突突就去了,到了之后,發現不認識租客。
令狐沖說,你把你租馬合同給我看看,這就是證書。
沒成想這租客是個二道販子,他呼啦一下掏出來一個裝滿租馬合同的文件袋,這就是證書庫。
租客拿出來跟店里直簽的合同,有雙方的印章,這就是自簽名證書。
令狐沖瞟了一眼,看到還有一些文件頭寫著什么 “大明戰馬管理公司xxx” 的租馬合同,大家都信任朝廷牽頭做的合同,這就是CA證書。
令狐沖看了租客的租馬合同,發現上面確實是店里的印章,這就是公鑰。
令狐沖掏出來一個鑰匙串,挑選了一把造型奇特的鑰匙,打開了大門,這就是私鑰。
這些鑰匙還有的是十字形的,有的是扁的,有的打凹點,有的劃凹槽,有不同的型號,這就是算法。
鑰匙和印章,這就是密鑰對。
令狐沖提了匹烏騅給租客,這二道販子騎上就走,大喊一句:俺老孫去也。
二、編碼與證書格式
學習Java加解密的同學,常常被各種文件及其格式給弄的暈頭轉向,這里幫同學們做一下劃分,幫助同學們理解
2.1 編碼格式的基石 - ASN.1語法
ASN.1 只是一種語法,它只定義 編碼怎么寫 ,不定義 編碼具體內容
下面是 ASN.1 的語法
類型名 ::= 基礎類型 { 類型具體描述 }
它只有這么個東西,這只是個語法,下面是一個語法示例
Blog ::= SEQUENCE {
address PrintableString,
title UTF8String,
date UTCTime,
content String,
status BlogStatus
}
2.2 編碼格式
編碼格式的制定,遵循上述章節的語法,但是有自己的屬性、屬性占據長度等的定義。
比如,定義的基礎類型有哪些(上章節中示例的基礎類型為 SEQUENCE)。
比如,編碼的前幾個字節,分別代表什么意思。
這里不再展開,有興趣的同學可以參閱各種編碼格式的說明,我們只需要了解編碼格式的概念就好了。
常見有如下編碼格式
- BER 基本編碼格式
- CER 規范編碼格式 ber 的變種,變長,在實際應用中比較少
- DER 卓越編碼格式 ber 的變種,定長,數字簽名的默認編碼
- PER 壓縮編碼格式
- XER XML編碼格式
通常的,我們說的證書內容的編碼格式,是指 DER 編碼格式,下文中均指 DER 編碼格式。
2.3 編碼標準
有了格式之后,并不能直接用來定義證書內容,就比如我們有了長城磚,但是并不知道長城該怎么壘
而編碼標準,就是告訴我們,通過已知的編碼格式(長城磚),怎么去壘長城。
2.3.1 x509 編碼標準
x509 是密碼學中,關于 公鑰證書格式 的一個編碼標準,用于證書。
我們說的數字證書,通常意義上是指 x509 公鑰證書,它含有公鑰、身份信息(比如網絡主機名,組織的名稱或個體名稱等)和簽名信息(可以是證書簽發機構 CA 的簽名,也可以是自簽名)
2.3.2 PKCS 編碼標準
嚴格來講,PKCS 是一個公鑰密碼學 標準組,它有一系列的編碼標準,拓展了諸如加解密、簽名、密鑰交換、分發證書等過程中的一些規范。
PKCS已經發布了15個版本的標準,常用的版本對應的用途說明如下:
| 公鑰加密標準 | 說明 | 文件后綴 |
|---|---|---|
| PKCS1 | RSA 加密規范,提供了基于 RSA 算法的公鑰加密實現的建議 | |
| PKCS 7 | 密碼消息語法標準 | .p7b .p7c .spc |
| PKCS 8 | 存儲私鑰信息的標準語法 | .key |
| PKCS 10 | 證書請求語法標準 | .p10 .csr |
| PKCS 12 | 個人信息交換語法標準 | .p12 .pfx |
其中,.p12 / .pfx 常用來做證書庫文件
2.4 證書文件格式
DER 編碼格式的證書是二進制文件,它不能在文本環境下交換信息,為了解決這個問題,出現了用 PEM 格式編碼的證書
2.4.1 PEM 文本編碼格式
簡單來說,PEM 實際上就是把 DER 二進制內容用 Base64 編碼一下,然后加上-----BEGIN label----- 形式的頭部和 -----END label----- 形式的尾部
下面是一個 PEM 編碼格式的公鑰
-----BEGIN PUBLIC KEY-----
BASE64 ENCODER STRING ...
-----END PUBLIC KEY-----
密鑰、證書都可以轉為 PEM 格式,以方便在文本環境中傳輸
2.4.2 常見證書文件
通常的,有如下常見證書文件
| 擴展名 | 說明 |
|---|---|
| .der | 二進制證書文件,不常用 |
| .pem | 證書或密鑰的文本存儲格式文件 |
| .csr | 證書簽名請求文件 |
| .key | 單獨存放的 PEM 編碼格式私鑰文件 |
| .cer | window 環境下常見證書庫文件,可以是二進制,也可以是 PEM 編碼格式 |
| .crt | linux 環境下常見證書庫文件,可以是二進制,也可以是 PEM 編碼格式 |
2.5 常見證書庫的文件編碼格式
常用的證書生成工具有 jdk 自帶的 keytool 、linux 體系的 openssl,對應的,他們生成的證書庫文件編碼格式如下:
- JKS -
keytool生成的證書庫的文件編碼格式,文件有*.jks,*.keystore - PEM -
openssl生成的證書庫的文件編碼格式,文件有*.pfx,*.p12
三、算法列舉
在報文傳輸過程中,一定會有使用密鑰對進行加密/解密、簽名/驗簽、報文摘要等操作,這些都需要有針對性的算法
| 算法 | 分類 | 說明 |
|---|---|---|
| AES | 加解密 | 對稱加密算法 |
| DES | 加解密 | 對稱加密算法 |
| RSA | 加解密/簽名 | 非對稱加密算法 |
| MD | 摘要 | 常見MD5 |
| SHA | 摘要 | 安全散列算法 |
| Mac | 摘要 | 消息認證碼算法 |
| DSA | 簽名 | 數字簽名算法,雖屬于非對稱加密,但不能加解密 |
| MD5withRSA | 簽名 | |
| SHA1withRSA | 簽名 | |
| SHA256withRSA | 簽名 | |
| SHA1withDSA | 簽名 | |
| SHA256withDSA | 簽名 | |
| SHA512withDSA | 簽名 |
總結
以上是生活随笔為你收集整理的[java与https]第一篇、证书杂谈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跨境电商 | 踏浪出海:我的Allegr
- 下一篇: MySQL8.0安装与环境配置win10