在weblogic部署的osb服務(wù)是單向驗(yàn)證平斩,也就是說server向client發(fā)送證書尝盼,而client不用向server發(fā)送螃概。 java client只修改要訪問帶SSL驗(yàn)證的的uri:
PostMethod post = **new** PostMethod( "[https://10.24.16.26:7002/ManagePhysicalInventoryConsumerProject/ManagePhysicalInventoryConsumerProxyService/requestPhysicalInventory](https://10.24.16.26:7002/ManagePhysicalInventoryConsumerProject/ManagePhysicalInventoryConsumerProxyService/requestPhysicalInventory)");
由于是單向驗(yàn)證,client不用修改其他東西桨嫁,以前是怎么訪問http的贰军,現(xiàn)在就怎么訪問https玻蝌。 跑了一遍后,報了異常词疼,關(guān)鍵的一句話在unable to find valid certification path to requested target俯树。 無法找到有效的、對請求目標(biāo)的證書贰盗。 也就是說许饿,server把證書給了我的client,client卻無法找到童太∶追看來,至少對java來說书释,單向驗(yàn)證翘贮,并不是說client什么都不用干。(聽項(xiàng)目組里一個C++同事說爆惧,C++似乎可以不干別的事狸页。。扯再。) 現(xiàn)在等于說芍耘,還是得把server的證書加入到client的truststore里。
方法1:為client再建立一個truststore熄阻,把server證書放在truststore里斋竞,然后去load這個store。有點(diǎn)麻煩秃殉,因?yàn)橐腸lient代碼坝初。這里不寫了,大家都知道怎么寫钾军。
方法2: 找了個簡單的辦法: 首先得到server證書:去訪問https://10.24.16.26:7002你需要SSL的服務(wù)的地址鳄袍,然后會彈出個對話框:
點(diǎn)查看證書,然后點(diǎn)詳細(xì)信息吏恭,然后復(fù)制到文件拗小,格式選擇der編碼二進(jìn)制 X.509,然后下一步樱哼,選擇個路徑文件名哀九,這個證書就被保存到本地了剿配。
現(xiàn)在,打開CMD勾栗,到JRE路徑下的\lib\security并且把剛保存的證書也copy到這個目錄下
輸入命令如下:
(上邊的命令需要知道server證書的別名) cacerts這個文件惨篱,是jre的truststore,是全局的围俘,而不是針對單個工程的砸讳。所以說,把server證書加進(jìn)cacerts界牡,那么在本jre環(huán)境下運(yùn)行的所有java程序都是信任這個證書的簿寂。
這倆方法各有優(yōu)點(diǎn): 方法1代碼要增加,但是卻移植性很好宿亡。 方法2代碼不用改常遂,把業(yè)務(wù)和安全完全分開了,而且由于是全局信任挽荠,適用多個工程克胳,移植性卻不好。