什么是數字簽名(digital signature
)
digital signature
,比如先用Hash
函數成內容的摘要 digest
,使用私鑰對這個摘要加密,生成數字簽名
什么是數字證書(digital certificate
)
digital certificate
是 證書中心,即CA機構 certificate authority
用自己的私鑰,對要認證的公鑰以及公鑰的一些附帶信息進行加密,生成的證書,即數字證書
證書標準
X.509
這是一種證書標準,主要定義了證書中應該包含了哪些內容
編碼格式
同樣的 X.509
證書,可能用不同的編碼格式。主要的編碼格式主要有以下兩種
-
PEM
-Private Enhanced Mail
,打開文件格式 以-----BEGIN...
開頭
以-----END...
結尾,內容是BASE64
編碼
查看PEM格式證書的信息:openssl x509 -in certificate.pem -text -noout
-
DER
-Distinguished Encoding Rules
二進制文件,不可讀
查看DER格式證書的信息:openssl x509 -in certificate.der -inform der -text -noout
什么是csr
文件
csr
文件就是Certificate secure request
證書請求文件。以-----BEGIN CERTIFICATE REQUEST-----
開頭,以-----END CERTIFICATE REQUEST-----
結尾。
我們想要申請CA機構頒發的證書,首先要生成CSR文件。CSR文件需要由申請人提供域名 公司名稱、部門等信息。生成命令
openssl req -new -nodes -newkey rsa:2048 -keyout domain.key -out domain.csr
同時也會生成私鑰文件
證書申請者只要把CSR文件提交給證書頒發機構后,證書頒發機構使用其根證書私鑰簽名就生成了證書公鑰文件,也就是頒發給用戶的證書。
相關的文件拓展名
這是比較誤導人的地方,雖然我們已經知道有PEM和DER這兩種編碼格式,但文件擴展名并不一定就叫"PEM"或者"DER",常見的擴展名除了PEM和DER還有以下這些,它們除了編碼格式可能不同之外,內容也有差別,但大多數都能相互轉換編碼格式.
CRT - CRT應該是certificate的三個字母,其實還是證書的意思,常見于*NIX系統,有可能是PEM編碼,也有可能是DER編碼,大多數應該是PEM編碼,相信你已經知道怎么辨別.
CER - 還是certificate,還是證書,常見于Windows系統,同樣的,可能是PEM編碼,也可能是DER編碼,大多數應該是DER編碼.
KEY - 通常用來存放一個公鑰或者私鑰,并非X.509證書,編碼同樣的,可能是PEM,也可能是DER.
查看KEY的辦法:openssl rsa -in mykey.key -text -noout
如果是DER格式的話,同理應該這樣了:openssl rsa -in mykey.key -text -noout -inform der
PFX/P12 -
predecessor of PKCS#12
,對*nix服務器來說,一般CRT和KEY是分開存放在不同文件中的,但Windows的IIS則將它們存在一個PFX文件中,(因此這個文件包含了證書及私鑰)這樣會不會不安全?應該不會,PFX通常會有一個"提取密碼",你想把里面的東西讀取出來的話,它就要求你提供提取密碼
一些命令
- 生成自簽名證書
openssl req -new -x509 -days 365 -nodes -out server_cert.pem -keyout server_key.pem
- 向權威證書頒發機構申請證書
openssl req -newkey rsa:2048 -new -nodes -keyout domain.key -out domain.csr
- 證書轉換 http://www.netkiller.cn/cryptography/openssl/format.html