1、加密算法
為了網絡通訊中的報文安全,一般需要對報文進行加密,目前常用的加密算法有:
非對稱加密算法:又稱公鑰加密算法,如RSA、DSA/DSS,最常用的就是RSA算法(算法公開,可自行百度了解算法細節),算法產生一個公鑰一個私鑰,用公鑰加密的報 文只能用私鑰解密,用私鑰加密的報文只能用公鑰解密;
對稱加密算法:3DES、AES、RC4,加密密鑰與解密密鑰相同,一般用於只有通訊雙方知道密鑰的通訊方式;
HASH算法:MD5、SHA1、SHA256,由哈希算法計劃得到哈希值,加密過程不可逆,由哈希值不能得到原明文,一般用於作摘要簽名;
2、數字證書
數字證書是由CA(Certificate Authority)機構,發行的用於網絡通訊中驗證身份的一種方式; 關於數字證書在此不做綴述,有興趣的小伙伴可以自行網上查找;
數字證書中一般包含了此證書擁有者、證書使用者、證書名稱、證書公鑰等信息。
3、證書生成
用JDK提供的證書管理工具keytool可以制作證書,命令如下:
keytool -genkey -keyalg RSA -keysize 2048 -validity 36500 -alias SEC_TEST -keypass 123456 -keystore test.keystore -storepass 123456 -dname "CN=localhost,OU=DEP,O=CN,L=BJ,ST=BJ,C=CN"
其中,-keyalg 指定算法,
-keysize指定密鑰大小,
-validity指定有效期,單位為天,
-alias 別名
-keypass 指定私鑰使用密碼,
-keystore指定密鑰庫名稱,
-storepass 證書庫的使用密碼,從裡面提取公鑰時需要密碼
-dname :CN擁有者名字,一般為網站名或IP+端口,如www.baidu.com,OU組織機構名 O組織名 L城市 ST州或省 C國家代碼
以上命令執行後將在當前目錄下產生一個keystore文件,裡面保存著密鑰和證書信息;
導出公鑰:
keytool -export -alias SEC_TEST -file test_pub_cer.cer -keystore test.keystore -storepass 123456
在當前目錄下會產生一個test_pub_cer.cer的證書,包含了公鑰信息及證書相關信息;
導入合作方公鑰:
通訊雙方假設為A和B,A發布了自己的證書並公開了公鑰,B所有經過A的公鑰加密的報文發送給A後,A可以正確解密,如果A給B發送報文,A用私鑰加密,B可以用公鑰解密,但這裡有一個問題就是公鑰是公開的,A發送給B的報文,任何有公鑰的人都可以解密,不能保證A向B發送信息的安全性,所以B也需要制作自己的證書,並對A公開自己的公鑰,這樣A向B發送信息裡用B的公鑰加密,這樣B就可以用私鑰解密,而其他截獲信息的人因為沒有私鑰也不能解密;A需要將B的公鑰導入自己的證書庫;
keytool -import -file B.cer -keystore test.keystore -storepass 123456
提示是否信任這個認證,y,回車後即可導入,然後查看證書庫中的證書條目:
keytool -list -v -keystore test.keystore -storepass 123456
先寫一點,下章將以HTTPS協議為例詳細講解使用過程。