HttpClient如何訪問(wèn)需要提交客戶(hù)端證書(shū)的SSL服務(wù)_第1頁(yè)
HttpClient如何訪問(wèn)需要提交客戶(hù)端證書(shū)的SSL服務(wù)_第2頁(yè)
HttpClient如何訪問(wèn)需要提交客戶(hù)端證書(shū)的SSL服務(wù)_第3頁(yè)
HttpClient如何訪問(wèn)需要提交客戶(hù)端證書(shū)的SSL服務(wù)_第4頁(yè)
HttpClient如何訪問(wèn)需要提交客戶(hù)端證書(shū)的SSL服務(wù)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論