標籤:ejbca ejbca開發 ejbca ws介面
《轉載請註明出處》
摸索這個東西好長時間了,資料太少無從下手找了個EJBCA的類似論壇的東西 一點點找入口.....
分享下:http://sourceforge.net/p/ejbca/discussion/132019/,有問題 裡面的人很快會回答的,但是 他們是做盈利機構的有些問題。。
EJBCA SVN路徑:https://svn.cesecore.eu/svn/ejbca/tags/Rel_3_9_7/ejbca 這是3的版本 有其他的自己找吧。
一、先介紹下介面調用:
EJBCA 提供的ws介面有兩種調用方式:1、直接走ws介面;2、EJBCA提供的有命令列的方式,輸入命令調用ws介面當然很多人會直接選擇EJBCA提供的ws介面,我當時是實在走不動了就反覆看他的API(下面英文的)才想去試試命令列的,執行一下發現JBOSS後台報錯一樣才明白是咋回事。Using the Web Services CLI
Included in the EJBCA Client Tool Box is a Web Service CLI tool.
To use the client do the following, copy the directory with all included files to the computer you want to remote administrate from. Then create a JKS or P12 file with the appropriate access rights (See the Using API section for details) and finally configure the file ejbcawsracli.properties. In this file you should specify the hostname of the CA server, the name of the keystore and the password to unlock it. Documentation for each setting is in the file ejbcacsracli.properties.
Use ‘ejbcaClientToolBox.sh EjbcaWsRaCli‘ for a list of each subcommand and ‘ejbcaClientToolBox.sh EjbcaWsRaCli "subcommand"‘ for detailed help how to use the cli.
Example usage: ejbcaClientToolBox.sh EjbcaWsRaCli pkcs12req testuser2 foo123 2048 NONE tmp
ejbcaClientToolBox.sh EjbcaWsRaCli revokeuser testuser2 SUPERSEDED false
二、調用步驟1、拿到根憑證;2、在程式中設定認證屬性;3、拿到ws介面;4、調用你要的方法;三、命令調用介面介紹先說第二種通過命令列介面:在你安裝EJBCA的目錄 ejbca_4_0_10\dist\ejbca-ws-cli 下面有cmd命令和sh命令,輸入後會有提示操作(但是這個命令太抽象、不是很好找)。如:尋找使用者wsadmin的命令這樣寫:
<span style="font-size:18px;">ejbcawsracli.cmd finduser USERNAME Equals wsadmin</span>
然後會出來你想要的!!其他的命令我是沒怎麼找,太麻煩了!所以就想其他辦法吧。
不要急,往下看。 當你輸入more ejbca-ws-cli.cmd 顯示:
顯示這個命令列是封裝了的jar檔案,所以我們就可以反編譯看他封裝的源碼了!!哈哈
下載svn的項目後 找到對應的路徑 看看吧,他是咋調用的就很清楚了(到這裡 就花了很長時間,因為沒思路)。
下面介紹下我熟悉的幾個介面:
到這個API的位置上看吧,裡面是你基本需要的方法:
http://www.ejbca.org/ws/org/ejbca/core/protocol/ws/client/gen/EjbcaWS.html#certificateRequest(org.ejbca.core.protocol.ws.client.gen.UserDataVOWS, java.lang.String, int, java.lang.String, java.lang.String)
四、介面樣本介紹(簡單介紹一個)
看ws的API按照他給的例子就是不對,下面的串連進去看吧!
http://tirnanog.ls.fi.upm.es:8080/ejbca/doc/adminguide.html#Sample code會出現很多的異常,還不知道錯在哪?
我這樣是正常的----
這樣設定認證的到程式中(官網他提供的API也不知道是方法太老還是太新了 ,我用的一直不對。)下面是我現在使用根憑證認證的代碼:
</pre><pre name="code" class="java">String urlstr = "https://localhost:8443/ejbca/ejbcaws/ejbcaws?wsdl";CryptoProviderTools.installBCProvider();System.setProperty("javax.net.ssl.keyStore","C:/ejbca_4_0_10/p12/superadmin.p12");System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");Provider tlsProvider = new TLSProvider();Security.addProvider(tlsProvider);Security.setProperty("ssl.TrustManagerFactory.algorithm", "AcceptAll");System.setProperty("javax.net.ssl.keyStorePassword", "ejbca");try {KeyManagerFactory.getInstance("NewSunX509");} catch (NoSuchAlgorithmException e1) {e1.printStackTrace();}Security.setProperty("ssl.KeyManagerFactory.algorithm", "NewSunX509");QName qname = new QName("http://ws.protocol.core.ejbca.org/","EjbcaWSService");EjbcaWSService service = null;try {service = new EjbcaWSService(new URL(urlstr), qname);} catch (MalformedURLException e) {e.printStackTrace();}EjbcaWS ejbcaraws = service.getEjbcaWSPort();
這樣你就可以拿到需要的webService介面了。下面是尋找使用者的例子:
UserMatch usermatch = new UserMatch();usermatch.setMatchwith(org.ejbca.util.query.UserMatch.MATCH_WITH_USERNAME); usermatch.setMatchtype(org.ejbca.util.query.UserMatch.MATCH_TYPE_EQUALS);usermatch.setMatchvalue(userName);List<UserDataVOWS> result = ejbcaraws.findUser(usermatch);//(ejbcaraws 就是上面擷取到的ws service)
簡單說下這個方法的參數:
setMatchwith 和setMatchtype 這兩個參數是來說明你要按照什麼尋找,例子中的是按使用者名稱查,他還提供了按subjectDN和組織等的查詢(自己看參數怎麼傳吧)
這就是最基本的操作了,下面的很多根據你需要自己看看源碼看看API吧。走通這個你最起碼不發愁沒方向了,我是難為了2周,找文章找人問都沒有 哭都哭不出來。
第一種調用法
很簡單了,只要你拿到他的源碼,還有啥不難辦的呢?人家帶的測試類別帶的例子那麼多,你要是看不出來 就.....
把測試路徑給你發出來:
思路給分析了,其他的問題可以問問哈 加EJBCA開發群:362248338
五、異常
上一篇安裝時候提到的302異常(又經一起學習的哥們“希望、在前方” 驗證,這個是正確的當你訪問伺服器時,捂手之後EJBCA會給你跳到127.0.0.1 就會報:伺服器發送了 HTTP 狀態碼 302: Moved Temporarily 異常)配置JBOSS :修改jboss下面的目錄中的檔案內容:
JOBSS_HOMErver/default/deployers/jbossws.deployer/META-INF/jboss-beans.xml
注釋掉
<property name="webServiceHost">${jboss.bind.address}</property>
否則在使用代碼訪問wsdl時候 會出現:
ClientTransportException: 伺服器發送了 HTTP 狀態碼 302: Moved Temporarily 異常
大家有什麼問題歡迎提一起探討,後面我會把我遇到的一些問題和異常分享下!