《转载请注明出处》
摸索这个东西好长时间了,资料太少无从下手找了个EJBCA的类似论坛的东西 一点点找入口.....
分享下:http://sourceforge.net/p/ejbca/discussion/132019/,有问题 里面的人很快会回答的,但是 他们是做盈利机构的有些问题。。
一、先介绍下接口调用:
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
二、调用步骤
三、命令调用接口介绍
<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按照他给的例子就是不对,下面的连接进去看吧!
这样设置证书的到程序中(官网他提供的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
五、异常
JOBSS_HOMErver/default/deployers/jbossws.deployer/META-INF/jboss-beans.xml
注释掉
<property name="webServiceHost">${jboss.bind.address}</property>
否则在使用代码访问wsdl时候 会出现:
ClientTransportException: 服务器发送了 HTTP 状态代码 302: Moved Temporarily 异常
大家有什么问题欢迎提一起探讨,后面我会把我遇到的一些问题和异常分享下!