你的問題是不是"由于無法驗證發(fā)行者,所以windows已經(jīng)阻止此軟件"如要安裝未簽名的activex控件,按如下步驟:1、打開Internet Explorer---菜單欄點“工具”---Internet選項--安全---自定義級別---安全設(shè)置---“ActiveX控件和插件下”的第5個“下載未簽名的ActiveX控件”選擇“提示”---確定!刷新您要安裝的頁面即可(因為使用的軟件沒有通過微軟的徽標(biāo)認證,在SP2中默認是不允許安裝這樣的程序的,解決方法為開始-控制面板-系統(tǒng)-硬件。其中在驅(qū)動程序項里有有個“驅(qū)動程序簽名”的選項,點開后。選第一項:忽略—安裝軟件,不用征求我的意見。)2、打開Internet Explorer---菜單欄點“工具”---Internet選項--安全---自定義級別---把里面所有禁用的全部改為啟用。3、打開Internet Explorer---菜單欄點“工具”---Internet選項---高級選項里面選擇"允許運行和安裝軟件,即使簽名無效”4、打開Internet Explorer---菜單欄點“工具”---Internet選項--安全---受信任的站點---把該網(wǎng)站添加進去(注意把https改為http)
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比南縣網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式南縣網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋南縣地區(qū)。費用合理售后完善,十載實體公司更值得信賴。
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的證書中提取簽發(fā)者的信息
byte[] encod1=c1.getEncoded(); 提取CA證書的編碼
X509CertImpl cimp1=new X509CertImpl(encod1); 用該編碼創(chuàng)建X509CertImpl類型對象
X509CertInfo cinfo1=(X509CertInfo)cimp1.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 獲取X509CertInfo對象
X500Name issuer=(X500Name)cinfo1.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME); 獲取X509Name類型的簽發(fā)者信息
(4)獲取待簽發(fā)的證書
CertificateFactory cf=CertificateFactory.getInstance("X.509");
FileInputStream in2=new FileInputStream("user.csr");
java.security.cert.Certificate c2=cf.generateCertificate(in);
(5)從待簽發(fā)的證書中提取證書信息
byte [] encod2=c2.getEncoded();
X509CertImpl cimp2=new X509CertImpl(encod2); 用該編碼創(chuàng)建X509CertImpl類型對象
X509CertInfo cinfo2=(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 獲取X509CertInfo對象
(6)設(shè)置新證書有效期
Date begindate=new Date(); 獲取當(dāng)前時間
Date enddate=new Date(begindate.getTime()+3000*24*60*60*1000L); 有效期為3000天
CertificateValidity cv=new CertificateValidity(begindate,enddate); 創(chuàng)建對象
cinfo2.set(X509CertInfo.VALIDITY,cv); 設(shè)置有效期
(7)設(shè)置新證書序列號
int sn=(int)(begindate.getTime()/1000); 以當(dāng)前時間為序列號
CertificateSerialNumber csn=new CertificateSerialNumber(sn);
cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);
(8)設(shè)置新證書簽發(fā)者
cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);應(yīng)用第三步的結(jié)果
(9)設(shè)置新證書簽名算法信息
AlgorithmId algorithm=new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
cinfo2.set(CertificateAlgorithmId.NAME+"."+CertificateAlgorithmId.ALGORITHM,algorithm);
(10)創(chuàng)建證書并使用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 應(yīng)有一對 RSA 的公私鑰對,私鑰是 CA 的生命,嚴格保密,而公鑰則發(fā)布給使用方。CA 簽發(fā)一張證書的話,主要是使用 CA 的 RSA 私鑰對證書進行簽名,并將簽名結(jié)果保存在證書當(dāng)中。使用者通過 CA 發(fā)布的公鑰來驗證證書中的簽名值,就可以確定該證書是否是由該 CA 簽發(fā)的。自己要做的就是從證書中提取簽名數(shù)據(jù)和用于簽名的原始數(shù)據(jù),再使用 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("有非法字符");}另外,校驗身份證號碼有專門程序的,可直接校驗身份證號是否正確,在自己在網(wǎng)上找下
JSSE是一個SSL和TLS的純Java實現(xiàn),通過JSSE可以很容易地編程實現(xiàn)對HTTPS站點的訪問。但是,如果該站點的證書未經(jīng)權(quán)威機構(gòu)的驗證,JSSE將拒絕信任該證書從而不能訪問HTTPS站點。
樓上答主說的其實沒錯,只是描述的不太清楚。比如說有兩個X509Certificate類型的證書對象caCert和userCert。
//獲取CA根證書中的公鑰
PublicKey publicKey = caCert.getPublicKey();
//使用用戶證書驗證根證書的公鑰,如果驗證通過說明這個用戶證書是這個根證書簽發(fā)的,驗證不過就不是這個根證書簽發(fā)的。
userCert.verify(publicKey);