使用SSL來實現安全加密通訊需要有密碼對及公鑰證書等..
JDK中自帶的一個工具keytool就可以用來生成密鑰對..管理密碼倉庫以及證書的導入導出..
keytool的默認路徑在~/java/jdk1.7.0/bin/下..以下介紹keytool的幾種基本應用..
1)創建服務端密鑰庫
>keytool -genkey -keystore d:/serverkey.jks -keyalg rsa -alias ssl1 -validity 700
上述命令中:
-genkey 生成密鑰對
-keystore 指定密碼倉庫的文件地址
-keyalg 密鑰所使用的算法
-alias 密鑰別名..使用密鑰時是使用此別名來區分的
-validity 密鑰有效期(天)..從當前系統時間開始計算
該命令成功後會要求輸入密碼倉庫的密碼..例如111111
然後是輸入你的個人信息..
最後會要求輸入別名的密碼..例如222222
創建成功後..在建立服務端的SSL連接時用下述方法導入密鑰..
String keyFile = serverkey.jks
String keyFilePass = "111111"
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray());
再利用該密碼倉庫來進行相應操作..
2)將服務端的公鑰導出成證書
>keytool -export -alias ssl1 -file d:/ssl1.cer -keystore d:/serverkey.jks
-export 導出
導出成功後就得到了ssl1.cer這一份證書了..然後就是要將這一份證書分發給客戶端..客戶端有了該證書後就能與服務端建立安全連接了..
3)生成客戶端的密鑰倉庫
方法與1)類似..
4)將*.cer導入到客戶端的密鑰倉庫裏
>keytool -import -file d:/ssl1.cer -keystore d:/clientkey.jks
-import 導入
上述命令成功後會要求輸入客戶端密鑰倉庫的密碼..
成功後在每次要訪問服務端之前還要將該證書添加到受信域中..系統會自動從受信域中檢查可用的證書來完成SSL連接通訊..
String keyFile = clientkey.jks
String keyFilePass = "111111"
System.setProperty("javax.net.ssl.trustStore",keyFile);
System.setProperty("javax.net.ssl.trustStorePassword",keyFilePass);
以上..實現了密鑰對的創建及管理之後..我們就可以開始實現SSL通訊了..