SSL學習筆記

1. 做爲文件形式存在的證書通常有這幾種格式:
1.帶有私鑰的證書
由Public Key Cryptography Standards #12,PKCS#12標準定義,包含了公鑰和私鑰的二進制格式的證書形式,以pfx做爲證書文件後綴名。
2.二進制編碼的證書
證書中沒有私鑰,DER 編碼二進制格式的證書文件,以cer做爲證書文件後綴名。
3.Base64編碼的證書
證書中沒有私鑰,BASE64 編碼格式的證書文件,也是以cer做爲證書文件後綴名。java

用keystool建立一個密鑰庫,裏面含有demo-server的公鑰與私鑰.bash

1. keytool -genkey -v -alias  demo-server -keyalg RSA -keystore ./server_ks -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,C=cn" -storepass server -keypass 123123服務器

導出demo-server的數字證書,證書有會有demo-server的公鑰socket

2. keytool -export -alias demo-server -keystore ./server_ks -file server_key.ceride

3. 把2生成的demo-server的數字證書導入到demo-client的密鑰庫./client_ks中編碼

keytool -import -trustcacerts -alias bluedash-ssl-demo-server -file ./server_key.cer -keystore ./client_ksspa

這樣客戶端就能夠與服務端通訊了..net

服務器端須要設定javax.net.ssl.keyStore/javax.net.ssl.keyStorePassword兩個系統參數code

而客戶端須要設定javax.net.ssl.trustStore/javax.net.ssl.trustStorePassword兩個系統參數server

 

 

  
  
           
  
  
  1. //server  
  2. System.setProperty("javax.net.ssl.keyStore", SERVER_KEY_STORE);  
  3.   System.setProperty("javax.net.ssl.keyStorePassword", SERVER_KEY_STORE_PASSWORD); SSLServerSocketFactory factory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();  
  4. SSLServerSocket _socket = (SSLServerSocket)factory.createServerSocket(8443);  
  5. _socket .accept();  
  6.  
  7. //client  
  8. System.setProperty("javax.net.ssl.tructStore", SERVER_TRUST_STORE);  
  9.   System.setProperty("javax.net.ssl.tructStorePassword", SERVER_TRUST_STORE_PASSWORD); SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();  
  10. SSLSocket _socket = (SSLSocket)factory.createSocket("localhost",8443);  
  11.  

 

 對於雙向認證而言,兩個端點既作爲服務端,也作爲客戶端。這時四個系統參數都須要設定。從字面自己的意思就能夠理解,keyStore存儲自已的私鑰,用於代表自已的身份,而trustStore存儲我能夠信任的其餘人公鑰。咱們通常所說的單向認證,就是客戶端去認證服務端,服務端須要keyStore存儲私鑰,而客戶端則須要把服務端的公鑰加入可信任認證列表,即trustStore中 

相關文章
相關標籤/搜索