




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
HttpCIient如何訪問(wèn)需要提交客戶(hù)端證書(shū)的SSL服務(wù)問(wèn)題背景自從***一期工程上了CA認(rèn)證網(wǎng)關(guān)之后,在訪問(wèn)受CA認(rèn)證網(wǎng)關(guān)保護(hù)的應(yīng)用子系統(tǒng)時(shí),必須提交客戶(hù)端證書(shū)。那么問(wèn)題來(lái)了,如果是人工(通過(guò)IE瀏覽器)訪問(wèn)子系統(tǒng)自然沒(méi)問(wèn)題,訪問(wèn)時(shí)會(huì)提示選擇證書(shū),輸入PIN碼等等,照做即可。但是如果是應(yīng)用程序去訪問(wèn)呢?例如,A子系統(tǒng)提供了外部接口程序,由于受到CA認(rèn)證網(wǎng)關(guān)的“保護(hù)”,外部程序如何訪問(wèn)A子系統(tǒng)的接口呢?問(wèn)題分析應(yīng)用程序自然沒(méi)法像人工一樣,借助瀏覽器訪問(wèn)應(yīng)用子系統(tǒng)。此時(shí)外部應(yīng)用程序如果直接通過(guò)HttpGet或HttpPost去訪問(wèn)應(yīng)用子系統(tǒng)的接口時(shí),會(huì)拋異常。由于上了CA認(rèn)證網(wǎng)關(guān)之后,實(shí)現(xiàn)的是應(yīng)用系統(tǒng)訪問(wèn)的雙向身份認(rèn)證,即:客戶(hù)端須驗(yàn)證服務(wù)端的身份,服務(wù)端也須驗(yàn)證客戶(hù)端的身份。為了實(shí)現(xiàn)雙向身份認(rèn)證,客戶(hù)端須安裝服務(wù)端提供的服務(wù)端證書(shū),并且客戶(hù)端在訪問(wèn)服務(wù)端時(shí)須提交客戶(hù)端證書(shū)。只有這樣才能實(shí)現(xiàn)應(yīng)用系統(tǒng)的正常訪問(wèn)。對(duì)于人工訪問(wèn)是如此,對(duì)于應(yīng)用程序訪問(wèn)亦是如此。令人慶幸的是,ApacheHttpClient提供了基于雙向認(rèn)證機(jī)制訪問(wèn)SSL服務(wù)的支持。HttpClient通過(guò)自定義一個(gè)攜帶證書(shū)的SSL連接,實(shí)現(xiàn)對(duì)需雙向認(rèn)證的服務(wù)的訪問(wèn)。1.3解決方案1.3.1準(zhǔn)備工作結(jié)合當(dāng)前案例的實(shí)際情況,有一些準(zhǔn)備工作要做:1、制作客戶(hù)端帶私鑰的軟證書(shū),并轉(zhuǎn)化成JKS格式。操作步驟如下:1)、在用戶(hù)管理中心注冊(cè)用戶(hù),并推送到證書(shū)注冊(cè)中心;2)、登錄證書(shū)注冊(cè)中心,首先更新用戶(hù)信息,把證書(shū)類(lèi)型修改為“RSA個(gè)人單向證書(shū)”(默認(rèn)是“RSA個(gè)人雙向證書(shū)”);3)、制作證書(shū),在“簽發(fā)個(gè)人證書(shū)”時(shí),“證書(shū)設(shè)備”選擇第二MicrosoftEnhancedCryptographicProviderv1.0
釜發(fā)證節(jié)用戶(hù)姓名:0000&1-&4證吾主題:C=CN~=^lj沛東.CN=OOOOOm證節(jié)類(lèi)型:R&ATA單證書(shū)密鑰類(lèi)型:口SA密鑰持發(fā)證選擇證書(shū)設(shè)備:Micros-oflEnhancedCryptographicProviderv1.0V匚傍用20+8位密卡.冃MicrosoftStrongCryptographicPro/iderLlicrcscftEnhancedC:r^*ptcgraphicPrevide-rv1.CEntar和宦ePassSO00GMCSPwl.O險(xiǎn)4)、導(dǎo)出證書(shū):證書(shū)制作完成后就可以在IE的Internet選項(xiàng)-內(nèi)容-證書(shū)列表中看到,然后選中該證書(shū),點(diǎn)擊導(dǎo)出。導(dǎo)出過(guò)程中注意選擇“是,導(dǎo)出私鑰(Y)”,如圖所示:然后下一步,輸入私鑰(123456):
最后導(dǎo)出一個(gè).pfx格式的個(gè)人證書(shū):00000194.p£s5)、把pfx格式證書(shū)轉(zhuǎn)換為JKS格式(pfx格式的證書(shū)無(wú)法直接引用,需要轉(zhuǎn)換成keystore格式,JKS就是keystore格式之一)。至于如何轉(zhuǎn)換,百度一下,你就知道。2、把服務(wù)端證書(shū)(證書(shū)鏈)導(dǎo)入trust.keystore中備用。在本案例中,服務(wù)端證書(shū)(證書(shū)鏈)包括ROOT.cer和CA.cer。這兩個(gè)證書(shū)須導(dǎo)入trust.keystore。用JDK自帶的keytool工具實(shí)現(xiàn)導(dǎo)入:keytool-import-aliasRoot-filed:/Root.cer-keystore"d:/trust.keystore"-storepass123456keytool-import-aliasCA-filed:/CA.cer-keystore"d:/trust.keystore"storepass1234563、在網(wǎng)關(guān)上添加用戶(hù),并授予角色。針對(duì)剛剛制作的證書(shū),所關(guān)聯(lián)的用戶(hù)需在網(wǎng)關(guān)上手動(dòng)錄入,并添加到相應(yīng)的角色中。只有這樣,才能通過(guò)CA認(rèn)證網(wǎng)關(guān)的系統(tǒng)級(jí)權(quán)限驗(yàn)證。操作步驟不再贅述。1.3.2訪問(wèn)應(yīng)用子系統(tǒng)ApacheHttpClient實(shí)現(xiàn)攜帶證書(shū)訪問(wèn)SSL服務(wù)的基本原理是:首先加載私鑰證書(shū)到一個(gè)KeyStore中,并把服務(wù)端可信任證書(shū)加載到一個(gè)TrustedKeyStore中;然后用這兩個(gè)KeyStore構(gòu)造一個(gè)SSLContext對(duì)象,最終實(shí)例化一個(gè)CloseableHttpClient對(duì)象,并通過(guò)CloseableHttpClient去訪問(wèn)SSL服務(wù)。importjava.io.File;importjava.io.FileInputStream;importjava.security.KeyStore;.ssl.SSLContext;importorg.apache.http.HttpEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;importorg.apache.http.conn.ssl.SSLContexts;importorg.apache.http.conn.ssl.TrustSelfSignedStrategy;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.util.EntityUtils;/***ThisexampledemonstrateshowtocreatesecureconnectionswithacustomSSLcontext.*/publicclassMyClientCustomSSL{privatefinalstaticStringTEST_URL="52:446/sfda/HelloWorldServlet";privatefinalstaticStringKEYSTORE_FILE="d:/00000190.jks";privatefinalstaticStringTRUSTSTORE_FILE="d:/trust.keystore";privatefinalstaticStringKEYSTORE_PASSWORD="123456";publicfinalstaticvoidmain(String[]args)throwsException{//loadtheCACERT(privatekey):KeyStorekeyStore=KeyStore.getInstance(KeyStore.getDefaultType());FileInputStreaminstream=newFileInputStream(newFile(KEYSTORE_FILE));try{keyStore.load(instream,KEYSTORE_PASSWORD.toCharArray());}finally{instream.close();}//loadthetrustedcerts:KeyStoretrustStore=KeyStore.getInstance(KeyStore.getDefaultType());FileInputStreaminstream1=newFileInputStream(newFile(TRUSTSTORE_FILE));try{trustStore.load(instream1,KEYSTORE_PASSWORD.toCharArray());}finally{instream1.close();}//TrustownCAandallself-signedcertsSSLContextsslcontext=SSLContexts.custom().loadKeyMaterial(keyStore,KEYSTORE_PASSWORD.toCharArray()).loadTrustMaterial(trustStore,newTrustSelfSignedStrategy()).build();//AllowTLSv1protocolonlySSLConnectionSocketFactorysslsf=newSSLConnectionSocketFactory(sslcontext,newString[]{"TLSv1"},null,SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);CloseableHttpClienthttpclient=HttpClientsc.ustom().setSSLSocketFactory(sslsf).build();try{HttpGethttpget=newHttpGet(TEST_URL);System.out.println("ExecutingRequest:"+httpget.getRequestLine());CloseableHttpResponseresponse=httpclient.execute(httpget);try{HttpEntityentity=response.getEntity();Systemout.println("");Systemout.println(response.getStatusLine());Systemout.println(EntityUtils.toString(entity));EntityUtilsc.onsume(entity);}finally{response.close();}}finally{h
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商平臺(tái)商家與消費(fèi)者權(quán)益保障交易協(xié)議
- 建議書(shū)合同投資建議書(shū)
- 有關(guān)工程安裝合同
- 設(shè)備工程安裝合同
- 大數(shù)據(jù)產(chǎn)業(yè)應(yīng)用研究合作合同
- 保利花園物業(yè)管理服務(wù)協(xié)議
- 網(wǎng)站安全維護(hù)協(xié)議
- 交通協(xié)管員聘用合同
- 酒店連鎖經(jīng)營(yíng)管理授權(quán)協(xié)議
- 培訓(xùn)技術(shù)服務(wù)合同
- 環(huán)境衛(wèi)生整治推進(jìn)行動(dòng)實(shí)施方案
- 2024年同等學(xué)力英語(yǔ)真題解析
- 2023年中考英語(yǔ)二輪復(fù)習(xí):動(dòng)詞的時(shí)態(tài)(附答案解析)
- 緒論中國(guó)文化概論張岱年
- 安徽省名校2022-2023學(xué)年高一下學(xué)期開(kāi)學(xué)考試生物試題(含答案)
- 血庫(kù)輸血培訓(xùn)課件
- 靜壓樁施工技術(shù)交底
- 《酒店客房管理課件》
- 服裝市場(chǎng)調(diào)研報(bào)告
- 醫(yī)院維修施工方案施工方案
- 第四單元細(xì)胞的物質(zhì)輸入和輸出(單元教學(xué)設(shè)計(jì))高一生物(人教版2019必修1)
評(píng)論
0/150
提交評(píng)論