版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、)這幾天被和證書搞得頭昏腦脹的。不過還好終于把這個搞定了。用進(jìn)行雙向身份驗證意思就是在客戶機連接服務(wù)器時,鏈接雙方都要對彼此的數(shù)字證書進(jìn)行驗證,保證這是經(jīng)過授權(quán)的才能夠連接(我們鏈接一般的時采用的是單向驗證,客戶機只驗證服務(wù)器的證書,服務(wù)器不驗證客戶機的證書。而連接網(wǎng)上銀行時使用的盾就是用來存儲進(jìn)行雙向驗證所需要的客戶端證書的)。里面內(nèi)置了一個數(shù)字證書生產(chǎn)工具:t但是這個工具只能生成自簽名的數(shù)字證書。所謂自簽名就是指證書只能保證自己是完整的,沒有經(jīng)過非法修改的。但是無法保證這個證書是屬于誰的。其實用這種自簽名的證書也是可以進(jìn)行雙向驗證的用生成的自簽名證書進(jìn)行雙向驗證請看這里,向這位仁兄致意:)
2、,但是這種驗證有一個缺點:對于每一個要鏈接的服務(wù)器,都要保存一個證書的驗證副本。而且一旦服務(wù)器更換證書,所有客戶端就需要重新部署這些副本。對于比較大型的應(yīng)用來說,這一點是不可接受的。所以就需要證書鏈進(jìn)行雙向認(rèn)證。證書鏈?zhǔn)侵笇ψC書的簽名又一個預(yù)先部署的,眾所周知的簽名方簽名完成,這樣每次需要驗證證書時只要用這個公用的簽名方的公鑰進(jìn)行驗證就可以了。比如我們使用的瀏覽器就保存了幾個常用的R每次連接到網(wǎng)站時只要這個網(wǎng)站的證書是經(jīng)過這些簽名過的。就可以通過驗證了。但是這些共用的的服務(wù)不是免費的。而且價格不菲。所以我們有必要自己生成一個的密鑰對,然后部署應(yīng)用時,只要把這個的私鑰部署在所有節(jié)點就可以完成驗證
3、了。要進(jìn)行的生成,需要()。你也可以在找到下的版本安裝好以后就可以生成證書鏈了,我寫了一個解決這些東西:echooffsetCsetPWD_SERVER_KS=serverkssetPWD_SERVER_KEY=serverkeysetPWD_CLIENT_KS=clientkssetPWD_CLIENT_KEY=clientkeyifnotexistca.key(echoGeneratingacarootkeyfile.opensslreq-new-x509-keyoutca.key-outca.crt-config%CONFIG%)else(echoca.keyalreadyexists.
4、ifnotexistserver.keystore(echoGeneratingserversprivatekey.keytool-genkey-aliaslogon_server_private_key-validity365-keyalgRSA-keysize1024SERVER_KS%-keystoreserver.keystore-keypass%PWD_SERVER_KEY%-storepass%PWD)else(echoserver.keystorealreadyexits.)ifnotexistclient.keystore(echoGeneratingclientsprivat
5、ekey.keytool-genkey-aliasipclient_private_key-validity365-keyalgRSA-keysize1024-keystoreclient.keystore-keypass%PWD_CLIENT_KEY%-storepass%PWD_CLIENT_KS%)else(echoclient.keystorealreadyexits.)echo=Finishedkeygeneration=ifnotexistlogon_server_private_key.csr(echoGeneratingserverssingaturerequestfile.k
6、eytool-certreq-aliaslogon_server_private_key-sigalgMD5withRSA-filelogon_server_private_key.csr-keypass%PWD_SERVER_KEY%-storepass%PWD_SERVER_KS%-keystoreserver.keystore)else(echologon_server_private_key.csralreadyexits.)ifnotexistipclient_private_key.csr(echoGeneratingclientssingaturerequestfile.keyt
7、ool-certreq-aliasipclient_private_key-sigalgMD5withRSA-fileipclient_private_key.csr-keypass%PWD_CLIENT_KEY%-storepass%PWD_CLIENT_KS%-keystoreclient.keystore)else(echoipclient_private_key.csralreadyexits.ifnotexistlogon_server_private_key.crt(opensslca-inlogon_server_private_key.csr-outlogon_server_p
8、rivate_key.crt-certca.crt-keyfileca.key-notext-config%CONFIG%)else(echologon_server_private_key.crtalreadyexits.)ifnotexistipclient_private_key.crt(opensslca-inipclient_private_key.csr-outipclient_private_key.crt-certca.crt-keyfileca.key-notext-config%CONFIG%)else(echoipclient_private_key.crtalready
9、exits.)echo=Finishedcarootsignaturing=echoImportingcarootcertsintokeystore.keytool-import-v-trustcacerts-aliasca_root-fileca.crt-storepass%PWD_SERVER_KS%-keystoreserver.keystorekeytool-import-v-trustcacerts-aliasca_root-fileca.crt-storepass%PWD_CLIENT_KS%-keystoreclient.keystoreechoImportingsignatur
10、edkeys.keytool-import-v-aliaslogon_server_private_key-filelogon_server_private_key.crt-keypass%PWD_SERVER_KEY%-storepass%PWD_SERVER_KS%-keystoreserver.keystorekeytool-import-v-aliasipclient_private_key-fileipclient_private_key.crt-keypass%PWD_CLIENT_KEY%-storepass%PWD_CLIENT_KS%-keystoreclient.keyst
11、oreechoAlldone!運行這個批處理,期間需要回答一些問題,然后就可以得到一些文件其中的密鑰文件。是需要在客戶端部署的,是在服務(wù)器部署的。是然后可以用下面的代碼測試:/*Copyrights(C)2008Bearice( HYPERLINK mailto:BeariceGBeariceG)*ReleaseunderGNU/GPLVersion2.*/packagecn.bearice.ipcontroller.ccserver;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.InputSt
12、reamReader;importjava.io.PrintWriter;importjava.security.KeyStore;importjava.security.cert.X509Certificate;importjava.util.logging.Level;importjava.util.logging.Logger;.ssl.KeyManagerFactory;.ssl.SSLContext;.ssl.SSLPeerUnverifiedException;.ssl.SSLServerSocket;.ssl.SSLServerSocketFactory;.ssl.SSLSess
13、ion;.ssl.SSLSocket;.ssl.SSLSocketFactory;.ssl.TrustManagerFactory;/*authorBearice*/publicclassNewClassextendsThreadOverridepublicvoidrun()trysleep(100);SSLContextctx=SSLContext.getInstance(SSL);KeyManagerFactorykmf=KeyManagerFactory.getInstance(SunX509);TrustManagerFactorytmf=TrustManagerFactory.get
14、Instance(SunX509);KeyStoreks=KeyStore.getInstance(JKS);/KeyStoretks=KeyStore.getInstance(JKS);ks.load(newFileInputStream(e:/certs/client.keystore),clientks.toCharArray();/tks.load(newFileInputStream(e:/certs/tclient.keystore),clientks.toCharArray();kmf.init(ks,clientkey.toCharArray();tmf.init(ks);ct
15、x.init(kmf.getKeyManagers(),tmf.getTrustManagers(),null);SSLSocketFactoryfactory=ctx.getSocketFactory();SSLSocketsocket=(SSLSocket)factory.createSocket(,4433);showCerts(socket.getSession();PrintWriterpw=newPrintWriter(socket.getOutputStream();pw.println(GET/index.htmlHTTP/1.0);pw.println(Server:);pw
16、.println(Connection:close);pw.println();pw.flush();BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream();Stringln;while(ln=in.readLine()!=null)System.err.println(ln);catch(Exceptionex)Logger.getLogger(NewClass.class.getName().log(Level.SEVERE,null,ex);publicstaticvoidshowCe
17、rts(SSLSessionsession)X509Certificatecert=null;trycert=(X509Certificate)session.getPeerCertificates()0;catch(SSLPeerUnverifiedExceptione)e.printStackTrace();System.err.println(session.getPeerHost()+didnotpresentavalidcertificate);/System.exit(1);return;System.out.println(session.getPeerHost()+haspre
18、sentedacertificatebelongingto+cert.getSubjectDN()+n+Thecertificatewasissuedby:t+cert.getIssuerDN()+publicstaticvoidmain(Stringargs)throwsExceptionSSLContextctx=SSLContext.getInstance(SSL);KeyManagerFactorykmf=KeyManagerFactory.getInstance(SunX509);TrustManagerFactorytmf=TrustManagerFactory.getInstan
19、ce(SunX509);KeyStoreks=KeyStore.getInstance(JKS);/KeyStoretks=KeyStore.getInstance(JKS);ks.load(newFileInputStream(e:/certs/server.keystore),serverks.toCharArray();/tks.load(newFileInputStream(e:/certs/tserver.keystore),serverks.toCharArray();kmf.init(ks,serverkey.toCharArray();tmf.init(ks);ctx.init
20、(kmf.getKeyManagers(),tmf.getTrustManagers(),null);SSLServerSocketFactoryfactory=ctx.getServerSocketFactory();SSLServerSocketserverSocket=(SSLServerSocket)factory.createServerSocket(4433);serverSocket.setNeedClientAuth(true);newNewClass().start();SSLSocketsocket=(SSLSocket)serverSocket.accept();trysocket.startHandshake();catch(Ex
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 政府采購合同性質(zhì)的認(rèn)定與問題
- 知名足浴品牌合同協(xié)議
- 軟件購買合同格式模板
- 玩具購銷合同樣本示例示例
- 房屋宅基地買賣合同的在線
- 書法展覽贊助合同
- 長期租賃合同解釋說明
- 公司借款合同協(xié)議書示例企業(yè)版
- 定制版委托服務(wù)合同
- 壽山石銷售合同模板示例
- 五年級上冊道德與法治課件-第8課第四課時 影響深遠(yuǎn)的漢字人教部編版
- 2023-2024學(xué)年江蘇省吳江市小學(xué)語文五年級上冊期末高分測試題
- GB/T 23604-2009鈦及鈦合金產(chǎn)品力學(xué)性能試驗取樣方法
- GB/T 20641-2006低壓成套開關(guān)設(shè)備和控制設(shè)備空殼體的一般要求
- 第1章 大數(shù)據(jù)可視化概述
- 檢驗危急值在急危重癥病人的臨床應(yīng)用課件
- 2023年湖南交通職業(yè)技術(shù)學(xué)院教師招聘考試筆試題庫及答案解析
- 主題班會 交通安全教育
- PPE安全防護(hù)知識培訓(xùn)
- 中醫(yī)學(xué):常用穴位課件
- 數(shù)字電子技術(shù)ppt課件完整版
評論
0/150
提交評論