版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
HttpCIient如何訪問需要提交客戶端證書的SSL服務問題背景自從***一期工程上了CA認證網(wǎng)關之后,在訪問受CA認證網(wǎng)關保護的應用子系統(tǒng)時,必須提交客戶端證書。那么問題來了,如果是人工(通過IE瀏覽器)訪問子系統(tǒng)自然沒問題,訪問時會提示選擇證書,輸入PIN碼等等,照做即可。但是如果是應用程序去訪問呢?例如,A子系統(tǒng)提供了外部接口程序,由于受到CA認證網(wǎng)關的“保護”,外部程序如何訪問A子系統(tǒng)的接口呢?問題分析應用程序自然沒法像人工一樣,借助瀏覽器訪問應用子系統(tǒng)。此時外部應用程序如果直接通過HttpGet或HttpPost去訪問應用子系統(tǒng)的接口時,會拋異常。由于上了CA認證網(wǎng)關之后,實現(xiàn)的是應用系統(tǒng)訪問的雙向身份認證,即:客戶端須驗證服務端的身份,服務端也須驗證客戶端的身份。為了實現(xiàn)雙向身份認證,客戶端須安裝服務端提供的服務端證書,并且客戶端在訪問服務端時須提交客戶端證書。只有這樣才能實現(xiàn)應用系統(tǒng)的正常訪問。對于人工訪問是如此,對于應用程序訪問亦是如此。令人慶幸的是,ApacheHttpClient提供了基于雙向認證機制訪問SSL服務的支持。HttpClient通過自定義一個攜帶證書的SSL連接,實現(xiàn)對需雙向認證的服務的訪問。1.3解決方案1.3.1準備工作結合當前案例的實際情況,有一些準備工作要做:1、制作客戶端帶私鑰的軟證書,并轉化成JKS格式。操作步驟如下:1)、在用戶管理中心注冊用戶,并推送到證書注冊中心;2)、登錄證書注冊中心,首先更新用戶信息,把證書類型修改為“RSA個人單向證書”(默認是“RSA個人雙向證書”);3)、制作證書,在“簽發(fā)個人證書”時,“證書設備”選擇第二MicrosoftEnhancedCryptographicProviderv1.0
釜發(fā)證節(jié)用戶姓名:0000&1-&4證吾主題:C=CN~=^lj沛東.CN=OOOOOm證節(jié)類型:R&ATA單證書密鑰類型:口SA密鑰持發(fā)證選擇證書設備:Micros-oflEnhancedCryptographicProviderv1.0V匚傍用20+8位密卡.冃MicrosoftStrongCryptographicPro/iderLlicrcscftEnhancedC:r^*ptcgraphicPrevide-rv1.CEntar和宦ePassSO00GMCSPwl.O險4)、導出證書:證書制作完成后就可以在IE的Internet選項-內容-證書列表中看到,然后選中該證書,點擊導出。導出過程中注意選擇“是,導出私鑰(Y)”,如圖所示:然后下一步,輸入私鑰(123456):
最后導出一個.pfx格式的個人證書:00000194.p£s5)、把pfx格式證書轉換為JKS格式(pfx格式的證書無法直接引用,需要轉換成keystore格式,JKS就是keystore格式之一)。至于如何轉換,百度一下,你就知道。2、把服務端證書(證書鏈)導入trust.keystore中備用。在本案例中,服務端證書(證書鏈)包括ROOT.cer和CA.cer。這兩個證書須導入trust.keystore。用JDK自帶的keytool工具實現(xiàn)導入:keytool-import-aliasRoot-filed:/Root.cer-keystore"d:/trust.keystore"-storepass123456keytool-import-aliasCA-filed:/CA.cer-keystore"d:/trust.keystore"storepass1234563、在網(wǎng)關上添加用戶,并授予角色。針對剛剛制作的證書,所關聯(lián)的用戶需在網(wǎng)關上手動錄入,并添加到相應的角色中。只有這樣,才能通過CA認證網(wǎng)關的系統(tǒng)級權限驗證。操作步驟不再贅述。1.3.2訪問應用子系統(tǒng)ApacheHttpClient實現(xiàn)攜帶證書訪問SSL服務的基本原理是:首先加載私鑰證書到一個KeyStore中,并把服務端可信任證書加載到一個TrustedKeyStore中;然后用這兩個KeyStore構造一個SSLContext對象,最終實例化一個CloseableHttpClient對象,并通過CloseableHttpClient去訪問SSL服務。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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電子商務物流配送創(chuàng)新與成本控制報告
- 2025年檢測站自查自糾報告及整改措施
- 互聯(lián)網(wǎng)企業(yè)用戶增長策劃方案
- 餐廳前廳服務流程培訓手冊
- 幼兒園主題活動教案設計模板
- 項目成本控制措施與執(zhí)行方案
- 長征主題手抄報制作模板
- 網(wǎng)絡編輯專業(yè)知識能力測試試題
- 超齡員工勸退流程及法律風險管控
- 工廠車間安全生產(chǎn)責任制解析
- 2026長治日報社工作人員招聘勞務派遣人員5人參考題庫完美版
- 2025年經(jīng)營分析報告
- 慢性心衰心肌代謝記憶的干細胞干預新策略
- 2026年孝昌縣供水有限公司公開招聘正式員工備考題庫有完整答案詳解
- 中建八局項目如何落實鋼筋精細化管理
- 鋼結構除銹后油漆施工方案
- 工程勘察設計收費標準(2002年修訂本)完整版
- GB/T 34956-2017大氣輻射影響航空電子設備單粒子效應防護設計指南
- 三菱扶梯介紹PLUS概述課件
- 江西樂平工業(yè)園區(qū)污水處理廠提標改造工程環(huán)評報告書
- 勞務作業(yè)分包勞務分包技術方案
評論
0/150
提交評論