加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

EJBCA 6 通过调用WebService接口增加用户并获取证书

发布时间:2020-12-16 23:30:57 所属栏目:安全 来源:网络整理
导读:今天终于搞定通过调用WebService 接口的方式在EJBCA 中增加用户。 本项目完整代码请参见http://git.oschina.net/xiangyunsoft/EjbcaWs 1、EJBCA6 默认会配置好ws服务,如果有其他配置需要在conf/jaxws.properties文件中进行配置。 2、编写客户端代码,调用ws

今天终于搞定通过调用WebService 接口的方式在EJBCA 中增加用户。

本项目完整代码请参见http://git.oschina.net/xiangyunsoft/EjbcaWs

1、EJBCA6 默认会配置好ws服务,如果有其他配置需要在conf/jaxws.properties文件中进行配置。

2、编写客户端代码,调用ws接口服务

package?cn.com.rexen.ca;

import?org.cesecore.util.CryptoProviderTools;
import?org.cesecore.util.provider.TLSProvider;
import?org.ejbca.core.protocol.ws.client.gen.*;

import?javax.net.ssl.KeyManagerFactory;
import?javax.xml.namespace.QName;
import?java.io.IOException;
import?java.net.MalformedURLException;
import?java.net.URL;
import?java.security.*;
import?java.security.cert.CertificateException;
import?java.util.List;

/**
?*?调用EJBCA?WS接口.
?*?Created?by?libo?on?2014/6/16.
?*/
public?class?CaWS?{

????/**?解决?java.security.cert.CertificateException:?No?subject?alternative?names?matching?IP?address?172.17.2.248?found
????172.17.2.248?换成自己的IP或机器名。
?????*/
????static?{
????????javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
????????????????new?javax.net.ssl.HostnameVerifier()?{

????????????????????public?boolean?verify(String?hostname,??????????????????????????????????????????javax.net.ssl.SSLSession?sslSession)?{
????????????????????????if?(hostname.equals("172.17.2.248"))?{
????????????????????????????return?true;
????????????????????????}
????????????????????????return?false;
????????????????????}
????????????????}
????????);
????}

????private?EjbcaWS?ejbcaWS;

????public?static?void?main(String[]?args)?throws?Exception?{
????????CaWS?caWS?=?new?CaWS();
????????caWS.initEjbcaWs();
????????caWS.create();
????????caWS.findUser();
????}

????/**
?????*?查询用户信息.
?????*/
????public?void?findUser()?throws?MalformedURLException,?EjbcaException_Exception,?IllegalQueryException_Exception,?EndEntityProfileNotFoundException_Exception,?AuthorizationDeniedException_Exception,?ApprovalException_Exception,?UserDoesntFullfillEndEntityProfile_Exception,?CADoesntExistsException_Exception,?WaitingForApprovalException_Exception?{
????????UserMatch?usermatch?=?new?UserMatch();
????????usermatch.setMatchwith(UserMatch.MATCH_WITH_EMAIL);?//按EMAIL地址进行查询
????????usermatch.setMatchtype(UserMatch.MATCH_TYPE_EQUALS);????//查询匹配方式
????????usermatch.setMatchvalue("123@qq.com");
????????List<UserDataVOWS>?result?=?ejbcaWS.findUser(usermatch);
????????System.out.println("result:"?+?result);

????????for?(UserDataVOWS?ud?:?result)?{
????????????System.out.println("==========================");
????????????System.out.println("userName:"?+?ud.getUsername());
????????????System.out.println("email:"?+?ud.getEmail());
????????????System.out.println("SubjectDN:"?+?ud.getSubjectDN());
????????????System.out.println("caName:"?+?ud.getCaName());
????????????System.out.println("==========================");
????????}
????}

????/**
?????*?初始化ws?接口服务.
?????*/
????public?void?initEjbcaWs()?{
????????CryptoProviderTools.installBCProvider();
????????String?urlstr?=?"https://172.17.2.248:8443/ejbca/ejbcaws/ejbcaws?wsdl";
????????String?fileName?=?"F:workspacecaWSsrcsuperadmin_62.p12";
????????String?password?=?"ejbca";
????????System.setProperty("javax.net.ssl.keyStore",?fileName);
????????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",?password);
????????try?{
????????????KeyManagerFactory.getInstance("NewSunX509");
????????}?catch?(NoSuchAlgorithmException?e)?{
????????????e.printStackTrace();
????????}

????????Security.setProperty("ssl.KeyManagerFactory.algorithm",?"NewSunX509");
????????QName?qname?=?new?QName("http://ws.protocol.core.ejbca.org/",?"EjbcaWSService");
????????URL?url?=?null;
????????try?{
????????????url?=?new?URL(null,?urlstr,?new?sun.net.www.protocol.http.Handler());
????????}?catch?(MalformedURLException?e)?{
????????????e.printStackTrace();
????????}
????????EjbcaWSService?service?=?new?EjbcaWSService(url,?qname);
????????ejbcaWS?=?service.getEjbcaWSPort();

????????String?version?=?ejbcaWS.getEjbcaVersion();

????????System.out.println("ejbcaWS?init?successfully.?EJBCA?Version?is?:"?+?version);
????}

????/**
?????*?增加用户
?????*/
????public?void?create()?throws?CertificateException,?NoSuchAlgorithmException,?KeyStoreException,?NoSuchProviderException,?IOException,?WaitingForApprovalException_Exception,?NotFoundException_Exception,?InvalidAlgorithmParameterException?{
????????String?password?=?"123456";

????????final?UserDataVOWS?userData?=?new?UserDataVOWS();
????????userData.setUsername("t_123");
????????userData.setPassword(password);?//如果模板指定自动生成密码,则不需要指定。
????????userData.setClearPwd(false);
????????userData.setSubjectDN("E=123@qq.com,UID=35,CN=t_123,OU=研发中心,O=qq.com,L=changchu,ST=jilin,C=china");
????????userData.setCaName("ManagementCA");
????????userData.setEmail("123@qq.com");
????????userData.setSubjectAltName(null);
????????userData.setStatus(UserDataVOWS.STATUS_NEW);
????????userData.setTokenType(UserDataVOWS.TOKEN_TYPE_P12);
????????userData.setEndEntityProfileName("EMPTY");
????????userData.setCertificateProfileName("ENDUSER");
//????????userData.setSendNotification(true);???????//如果配置邮件发送,则可以设置增加用户时发送信息。
????????ejbcaWS.editUser(userData);
????????
????????writeFile(userData,?ejbcaWS);

????????System.out.println("create?user?successfully.");
????}
????
????????/**
?????*?生成证书
?????*/
????public?void?writeFile(UserDataVOWS?user1,?EjbcaWS?ws)?throws?InvalidAlgorithmParameterException,?CertificateException,?InvalidKeyException,?SignatureException,?CADoesntExistsException_Exception?{
????????//?For?now,?assume?RSA?and?SHA1WithRSA.
????????String?strKeySpec?=?"1024";
????????KeyPair?keys?=?KeyTools.genKeys(strKeySpec,????????????????AlgorithmConstants.KEYALGORITHM_RSA);

????????PKCS10CertificationRequest?pkcs10?=?new?PKCS10CertificationRequest("SHA256withRSA",?new?X500Principal(
????????????????user1.getSubjectDN()),?keys.getPublic(),?null,?keys.getPrivate());

????????CertificateResponse?certenv?=?ws.certificateRequest(user1,????????????????new?String(Base64.encode(pkcs10.getEncoded())),????????????????CertificateHelper.CERT_REQ_TYPE_PKCS10,????????????????CertificateHelper.RESPONSETYPE_CERTIFICATE);
//
????????X509Certificate?cert?=?certenv.getCertificate();
????????java.security.KeyStore?jks?=?java.security.KeyStore
????????????????.getInstance(user1.getTokenType().equals("JKS")???"JKS"
????????????????????????:?"pkcs12");
????????jks.load(null,?user1.getPassword().toCharArray());

????????java.security.cert.CertificateFactory?cf?=?java.security.cert.CertificateFactory
????????????????.getInstance("X.509");
????????java.security.cert.Certificate?cert1?=?cf
????????????????.generateCertificate(new?ByteArrayInputStream(cert
????????????????????????.getEncoded()));

????????java.security.cert.Certificate[]?certs?=?new?java.security.cert.Certificate[1];
????????certs[0]?=?cert1;

????????//?Following?logic?used?in?EjbcaWS.java,?the?alias?is?the?common
????????//?name,?if?present,?and?otherwise,?is?the?username.
????????String?alias?=?CertTools.getPartFromDN(user1.getSubjectDN(),????????????????"CN");
????????if?(alias?==?null)?{
????????????alias?=?user1.getUsername();
????????}


????????String?strFileName?=?"c:temptest.p12";

????????FileOutputStream?out?=?new?FileOutputStream(strFileName);

????????//?storing?keystore
????????java.security.PrivateKey?ff?=?keys.getPrivate();

????????jks.setKeyEntry(alias,?ff,?user1.getPassword().toCharArray(),????????????????certs);
????????jks.store(out,?user1.getPassword().toCharArray());
????????out.close();
????}
}

执行程序运行结果如下:

ejbcaWS?init?successfully.?EJBCA?Version?is?:EJBCA?6.2.0?(r19221)
create?user?successfully.
result:[org.ejbca.core.protocol.ws.client.gen.UserDataVOWS@44c35c97]
==========================
userName:t_123
email:123@qq.com
SubjectDN:E=123@qq.com,C=china
caName:ManagementCA
==========================

工程所需要jar在ejcb_home/dist/ejbca-ws-cli/lib目录下。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读