NJ CA钥匙盘 读取方式


//客户端
function certLogin()
{
	var pwd = document.getElementById("certPwd").value; //获取页面用户输入的证书密码
	if(pwd.replace(/[ ]/g,"")==""){
		alert("证书密码不能为空,请输入有效的密码!");
		return false;
	}
	try{
		NJCA.ClearPasswd();//清除证书缓存密码
		rs = NJCA.setPasswd('P11', pwd, 1); //除pwd为用户输入,其它参数固定不变
	}catch(e){
		//上面函数执行异常,原因都是没有加载到安徽CA证书驱动导致
		alert('控件初始化失败,请确认CA驱动是否安装正确!');	
		return false;
	}
	if(!rs)
	{
		//未插KEY或证书密码不对会有如下提示
		var errorMsg = NJCA.GetLastErrorInfo(0);//获取错误详情
		errorMsg += '\n请确认CA的UKEY是否正确插入,或密码是否正确!';
		alert(errorMsg);
		return false;
	}

	//获取证书PEM值
	var strClientCert = NJCA.GetCertEx(2); //参数请默认为2
	
	if('' == strClientCert ||strClientCert==null)
	{
		alert("证书获取异常!\n请确认CA的UKEY是否正确插入,或证书是否存在!");
		NJCA.GetLastErrorInfo(0);
		return false;
	}
	
	var yxqts = NJCA.GetCertInfo(strClientCert, 3043, ''); //证书有效期剩余天数
	if(yxqts<=30){
		if(yxqts<=0){
			alert("证书已过期!\n请联系CA延期证书再使用:400-880-4959");
			return false;
		}
		alert("证书有效期还剩"+yxqts+"天!\n请尽快联系CA延期证书:400-880-4959");
	}
	var certcn = NJCA.GetCertInfo(strClientCert, 3007, ''); //证书名称,一般为企业名称或个人姓名,根据业务系统需要获取
	var certSn = NJCA.GetCertInfo(strClientCert, 3031, ''); //证书序列号,每个证书都不一样,根据业务系统需要获取
	
	//获取证书O项信息
	var userOrg = NJCA.GetCertInfo(strClientCert, 3005, '');

	var sjs = Math.random();//产生随机数
	var bRet = NJCA.Sign(sjs); //客户端对随机数签名 返回true/false 即签名成功/签名失败
	var signData = "";
	if (bRet){
		signData = NJCA.SignedData;//签名成功,NJCA.SignedData为签名结果
	}else{
		alert("执行签名失败!请确认密码是否正确,或UKEY是否正确插入!");
		return false;
	}
	console.log("扩展域信息:"+NJCA.GetExtensionInfo("1.2.156.10260.4.1.1"));

}


//服务器端
	String signData = request.getParameter("signData"); //来自客户端:证书签名结果
	String certPem = request.getParameter("certPem");//来自客户端:证书PEM值
	
	String certCn = request.getParameter("certCn");//企业中文名称或个人姓名
	String certSn = request.getParameter("certSn"); //证书唯一标识,所有CA证书这一项是百分百确认是肯定不一样的
	String userOrg = request.getParameter("userOrg");//证书O项
	
	out.print("企业名称/个人姓名:"+certCn+","+"证书O项:"+userOrg+",证书唯一标识:"+certSn+"<br/><br/><br/>");
	
	String strSOAPServer = "http://192.168.1.78:8080/soap";	//服务端地址,该地址为公网地址,测试时连接公网可用,正式使用可能需要更换为正式服务器地址
	
	if (certPem != null && signData != null)
	{
		try{
			//调用签名服务器接口,验证客户端证书有效性
			String[] verifycert = new ahcapkiservers().ServerVClient( strSOAPServer , certPem , signData );

			//返回结果为1表示验证成功,返回其它均表示失败;verifycert[1]为相应的说明,错误时为错误原因

			if( verifycert[0].equals("1") )
				out.print("<font color='blue'>"+verifycert[1]+",登陆成功!</font>");
			else
				out.print("<font color='red'>登陆失败:"+verifycert[1]+"</font>");
		}catch (Exception e) {
			out.print("调用服务器验证证书异常!");
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值