你的问题是不是"由于无法验证发行者,所以windows已经阻止此软件"如要安装未签名的activex控件,按如下步骤:1、打开Internet Explorer---菜单栏点“工具”---Internet选项--安全---自定义级别---安全设置---“ActiveX控件和插件下”的第5个“下载未签名的ActiveX控件”选择“提示”---确定!刷新您要安装的页面即可(因为使用的软件没有通过微软的徽标认证,在SP2中默认是不允许安装这样的程序的,解决方法为开始-控制面板-系统-硬件。其中在驱动程序项里有有个“驱动程序签名”的选项,点开后。选第一项:忽略—安装软件,不用征求我的意见。)2、打开Internet Explorer---菜单栏点“工具”---Internet选项--安全---自定义级别---把里面所有禁用的全部改为启用。3、打开Internet Explorer---菜单栏点“工具”---Internet选项---高级选项里面选择"允许运行和安装软件,即使签名无效”4、打开Internet Explorer---菜单栏点“工具”---Internet选项--安全---受信任的站点---把该网站添加进去(注意把https改为http)
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比南县网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式南县网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖南县地区。费用合理售后完善,十载实体公司更值得信赖。
1)从密钥库中读取CA的证书
FileInputStream in=new FileInputStream(".keystore");
KeyStore ks=KeyStore.getInstance("JKS");
ks.load(in,storepass.toCharArray());
java.security.cert.Certificate c1=ks.getCertificate("caroot");
(2)从密钥库中读取CA的私钥
PrivateKey caprk=(PrivateKey)ks.getKey(alias,cakeypass.toCharArray());
(3)从CA的证书中提取签发者的信息
byte[] encod1=c1.getEncoded(); 提取CA证书的编码
X509CertImpl cimp1=new X509CertImpl(encod1); 用该编码创建X509CertImpl类型对象
X509CertInfo cinfo1=(X509CertInfo)cimp1.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 获取X509CertInfo对象
X500Name issuer=(X500Name)cinfo1.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME); 获取X509Name类型的签发者信息
(4)获取待签发的证书
CertificateFactory cf=CertificateFactory.getInstance("X.509");
FileInputStream in2=new FileInputStream("user.csr");
java.security.cert.Certificate c2=cf.generateCertificate(in);
(5)从待签发的证书中提取证书信息
byte [] encod2=c2.getEncoded();
X509CertImpl cimp2=new X509CertImpl(encod2); 用该编码创建X509CertImpl类型对象
X509CertInfo cinfo2=(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 获取X509CertInfo对象
(6)设置新证书有效期
Date begindate=new Date(); 获取当前时间
Date enddate=new Date(begindate.getTime()+3000*24*60*60*1000L); 有效期为3000天
CertificateValidity cv=new CertificateValidity(begindate,enddate); 创建对象
cinfo2.set(X509CertInfo.VALIDITY,cv); 设置有效期
(7)设置新证书序列号
int sn=(int)(begindate.getTime()/1000); 以当前时间为序列号
CertificateSerialNumber csn=new CertificateSerialNumber(sn);
cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);
(8)设置新证书签发者
cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);应用第三步的结果
(9)设置新证书签名算法信息
AlgorithmId algorithm=new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
cinfo2.set(CertificateAlgorithmId.NAME+"."+CertificateAlgorithmId.ALGORITHM,algorithm);
(10)创建证书并使用CA的私钥对其签名
X509CertImpl newcert=new X509CertImpl(cinfo2);
newcert.sign(caprk,"MD5WithRSA"); 使用CA私钥对其签名
(11)将新证书写入密钥库
ks.setCertificateEntry("lf_signed",newcert);
FileOutputStream out=new FileOutputStream("newstore");
ks.store(out,"newpass".toCharArray()); 这里是写入了新的密钥库,也可以使用第七条来增加条目
PKI 目前使用最多的非对称算法是 RSA。对于基于 RSA 的 PKI 而言,CA 应有一对 RSA 的公私钥对,私钥是 CA 的生命,严格保密,而公钥则发布给使用方。CA 签发一张证书的话,主要是使用 CA 的 RSA 私钥对证书进行签名,并将签名结果保存在证书当中。使用者通过 CA 发布的公钥来验证证书中的签名值,就可以确定该证书是否是由该 CA 签发的。自己要做的就是从证书中提取签名数据和用于签名的原始数据,再使用 CA 的公钥验证这个签名就可以了。
如果只要判断有非法的字符(除0-9和Xx外)可用正则表达式publicstaticvoidmain(String[]args){//TODOcodeapplicationlogichereStrings="2142213weqrwe32";StringregEx="[^0-9Xx]";Patternpat=Pattern.compile(regEx);Matchermat=pat.matcher(s);booleanrs=mat.find();if(rs){System.out.print("有非法字符");}另外,校验身份证号码有专门程序的,可直接校验身份证号是否正确,在自己在网上找下
JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问。但是,如果该站点的证书未经权威机构的验证,JSSE将拒绝信任该证书从而不能访问HTTPS站点。
楼上答主说的其实没错,只是描述的不太清楚。比如说有两个X509Certificate类型的证书对象caCert和userCert。
//获取CA根证书中的公钥
PublicKey publicKey = caCert.getPublicKey();
//使用用户证书验证根证书的公钥,如果验证通过说明这个用户证书是这个根证书签发的,验证不过就不是这个根证书签发的。
userCert.verify(publicKey);