圖片來源:三張圖讓你全面掌握加密解密技術html
什麼是公鑰和私鑰?java
公鑰和私鑰就是俗稱的不對稱加密方式。公鑰(Public Key)與私鑰(Private Key)是經過一種算法獲得的一個密鑰對(即一個公鑰和一個私鑰),公鑰是密鑰對中公開的部分,私鑰則是非公開的部分。公鑰一般用於加密會話密鑰、驗證數字簽名,或加密能夠用相應的私鑰解密的數據。node
經過這種算法獲得的密鑰對能保證在世界範圍內是惟一的。使用這個密鑰對的時候,若是用其中一個密鑰加密一段數據,則必須用另外一個密鑰才能解密。好比用公鑰加密的數據就必須用私鑰才能解密,若是用私鑰進行加密也必須用公鑰才能解密,不然將沒法成功解密。git
數字證書的原理github
數字證書採用公鑰體制,即利用一對互相匹配的密鑰對進行加密、解密。每一個用戶本身設定一把特定的僅爲本人所知的私有密鑰(私鑰),用它進行解密和簽名;同時設定一把公共密鑰(公鑰)並由本人公開,爲一組用戶所共享,用於加密和驗證簽名。算法
因爲密鑰僅爲本人全部,這樣就產生了別人沒法生成的文件,也就造成了數字簽名。shell
數字證書是一個經證書受權中心(CA)數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及證書受權中心的數字簽名。數字證書還有一個重要的特徵就是隻在特定的時間段內有效。windows
主流數字證書都有哪些格式?安全
通常來講,主流的Web服務軟件,一般都基於OpenSSL和Java兩種基礎密碼庫。oracle
如何判斷證書文件是文本格式仍是二進制格式?
您可使用如下方法簡單區分帶有後綴擴展名的證書文件:
密鑰管理工具
MakeCert(已過時,推薦使用 Powershell New-SelfSignedCertificate)
微軟證書建立工具生成僅用於測試目的的 X.509 證書。它建立用於數字簽名的公鑰和私鑰對,並將其存儲在證書文件中。此工具還將密鑰對與指定發行者的名稱相關聯,並建立一個 X.509 證書,該證書將用戶指定的名稱綁定到密鑰對的公共部分。
OpenSSL
OpenSSL 是一個強大且應用普遍的安全基礎庫工具。
OpenSSL 建立RSA私鑰 (2048位) openssl genrsa -out private_key.pem 2048 openssl rsa -in private_key.pem -pubout -out public_key.pem
Keytool
Keytool工具是 JDK 中自帶的密鑰管理工具,能夠製做Keystore(jks)格式的證書文件,能夠從下載JDK工具包來獲取Keytool工具。
證書格式轉換
如下證書格式之間是能夠互相轉換的
您可使用JDK中自帶的Keytool工具,將JKS格式證書文件轉換成PFX格式。例如,您能夠執行如下命令將 server.jks證書文件轉換成server.pfx證書文件:
keytool -importkeystore -srckeystore D:\server.jks -destkeystore D:\server.pfx
-srcstoretype JKS -deststoretype PKCS12
您可使用JDK中自帶的Keytool工具,將PFX格式證書文件轉換成JKS格式。例如,您能夠執行如下命令將 server.pfx證書文件轉換成server.jks證書文件:
keytool -importkeystore -srckeystore D:\server.pfx -destkeystore D:\server.jks
-srcstoretype PKCS12 -deststoretype JKS
您可使用 OpenSSL工具,將KEY格式密鑰文件和CRT格式公鑰文件轉換成PFX格式證書文件。例如,將您的KEY格式密鑰文件(server.key)和CRT格式公鑰文件(server.crt)拷貝至OpenSSL工具安裝目錄,使用OpenSSL工具執行如下命令將證書轉換成server.pfx證書文件:
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
您可使用 OpenSSL工具,將PFX格式證書文件轉化爲KEY格式密鑰文件和CRT格式公鑰文件。例如,將您的PFX格式證書文件拷貝至OpenSSL安裝目錄,使用OpenSSL工具執行如下命令將證書轉換成server.pem證書文件KEY格式密鑰文件(server.key)和CRT格式公鑰文件(server.crt):
openssl pkcs12 -in server.pfx -nodes -out server.pem openssl rsa -in server.pem -out server.key openssl x509 -in server.pem -out server.crt
REFER:
數字證書原理
http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
數字簽名是什麼?
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
數字證書常見標準
http://www.javashuo.com/article/p-ytojebef-o.html
keytool和openssl生成的證書轉換
http://www.javashuo.com/article/p-bvmusymq-dh.html
數字證書應用綜合揭祕(包括證書生成、加密、解密、簽名、驗籤)
http://www.javashuo.com/article/p-gwfgcrxz-bq.html
淺談常見的七種加密算法及實現
http://www.javashuo.com/article/p-waofxqez-bn.html
證書及證書管理(keytool工具實例)
https://www.cnblogs.com/benwu/articles/4891758.html
https://www.alibabacloud.com/help/zh/faq-detail/42214.htmhttps://github.com/google/tink