ssl通道能解決使用者驗證,指紋防篡改,資料加密。 使用者驗證通過雙方的證書鏈來進行, 防篡改有證書的數字簽名,資料加密則由ssl握手協商後的對稱密碼來對socket包進行加密。
ssl雙向驗證中,1)客戶端需要提供自己的證書供伺服器端進行驗證。2)伺服器端用客戶端的證書中的公鑰對握手資料加密,客戶端需要用自己的金鑰來解密握手資料。3)握手中需要產生隨機數。 所以jdk中的sslcontext中的初始化方法init中需要這三個引數,其宣告方法為
init(keymanager km, trustmanager tm, securerandom random) ,
以下為樣例,我們這裡不打算從jdk的keytool建立的庫中取證書,只是直接從乙個已知的字串中拿證書,所以直接實現乙個簡單的trustmanager和keymanager:
sslcontext = sslcontext.getinstance("ssl");
sslcontext.init(new keymanager
,new trustmanager
,new securerandom ());
******keymanager實現了x509keymanager介面,儲存自己的證書內容和私鑰。
******trustmanager實現了trustmanager介面,儲存了客戶端信任的證書。
init後sslcontext初始化完成,此時可以呼叫sslcontext.getsocketfactory()取得sslsocketfactory例項。然後用取到的factory來建立sslsocket連線,當然,還需要提供socket物件,host位址,host埠:
(sslsocket) sslssfactory.createsocket(socket s, string host, int port, boolean autoclose);
得到了sslsocket之後的操作就跟普通socket一樣了,socket.getoutputstream()
sslsocket有幾個選項設定ssl連線建立時的設定,如配置伺服器模式或客戶端模式,以下是較有用的幾個:
sslsocket.setenabledciphersuites( new string);
sslsocket支援的密碼套件。
sslsocket.setenablesessioncreation( true );
新的ssl可以此socket建立。
sslsocket.setneedclientauth( true );
是否要求客戶端身份驗證,既校驗證書。
sslsocket.setuseclientmode( false );
握手時使用什麼模式(客戶端/伺服器)。
C 的一些細節
1.c 中,將負數賦值給unsigned是完全合法的。例如,將 1賦值給unsigned char,那麼結果是255.2.c 中,double的精度和計算速度都要超過float,long double則需要承擔額外的執行代價。3.std ou t hi d endl 等價於std out hi 4....
迴圈的一些細節
1 迴圈執行次數相同,大迴圈放在外面還是小迴圈放在外層效率高呢?int end1 10 int end2 100 int end3 1000000 long starttime system.nanotime 開始時間 for int i 1 i end3 i long endtime system...
SDWebImage的一些細節
清空快取 cleandisk 清除過期快取,計算當前快取的大小,和設定的最大快取數量比較,如果超出那麼會繼續刪除 按照檔案穿件的先後順序 cleardisk 直接刪除重新建立 7天 sdwebimagemanager sharedmanager imagecache cleandisk 取消當前所有...