パッケージcom.ylsoft.cert; Import java.io.file; import java.io.fileinputStream; Import java.io.fileoutputStream; Import java.io.ioException; Import java.security; Inteming java.security; Intal java.security.keypair; Import.keypurity java.security.keystore; Import java.security.keystoreException; Import java.security.nosuchalgorithmexceptection; Import java.security.nosuchproviderexception; Import java.security.privatekey; Import Java.securary.securerandom; intecurerandom; Import.securerandom; Import java.securerandom; Import. java.security.signatureexception; Import java.security.unrecoverable exception; Import java.security.cert.certificate; Import java.security.cert.certificateexception; Import java.security.cert.cert.x509certificate; Import java.util.util.date; sun.misc.base64encoder; Import sun.security.util.objectidentifier; Import sun.security.x509.algorithmid; import sun.x509.certandkeygen; import sun.security.x509.certificatealgorithmid; import.x59.certificatexensions; import.x509.certificatexensions; sun.security.x509.certificateSerialnumber; Import sun.security.x509.certificateCurity性; import sun.security.x509.certificateversion; import sun.security.x509.certificatex509key; Import sun.security.x509.extedendedededageextension; Import.xx509.extions.x.x509.Extions sun.security.x509.keyusageextension; import sun.security.x509.subjectkeyidentifierextension; import sun.security.x509.x500name; Import sun.security.x509.x500signer; Import sun.security.x509.x509certimpl; Import.x59.x59.x59CertiNfo;首先生成Ca的根证书、Ca然后有Ca的根证书签署生成scriptx securerandom.getInstance( "sha1prng"、 "sun");} public void createcert(x509certificate証明書、privatekey rootprivkey、keypair kp)は、exception、ioexception、invalidkeyexception、nosuchalgorithmexception、nosuchprovidexception、signexception、signexception、 v1byte certbytes [] = certificate.getEncoded(); // x509certimplクラスはx.509 certificate.x509certimpl x509certimpl = new x509certimpl(certbytes); (x509CertInfo)x509Certimpl.get( "x509.info"); //このクラスは、証明書のx509key属性を定義します。x509certinfo.set( "key"、new certifationx509key(kp.getpublic()); certifentextensions(); cermostextensions.set( "subjectkeyidentifier"、new subjeckeyidentifierextension((new keyidentifier(kp.getpublic()))。getIdentifier()); x500Name( "cn = rootca、ou = hackwp、o = wp、l = bj、s = bj、c = cn"); x509certinfo.set( "sissuer.dname"、発行者); // //従来のフォーマット文字列から名前を構築します。 (RFC 1779またはRFC // 2253スタイル).x500Name件名= new x500Name( "cn = scriptx、ou = wps、o = wps、l = bj、st = bj、c = cn"); x509certinfo.set( "subject.dname"、subject); signature.getInstance( "md5withrsa"); //初始化这个用于签名的对象。如果使用其他参数再次调用此方法、此调用的结果将无效。signature.initsign(kp.getprivate()); // issuer); //このクラスは、暗号化変換などのアルゴリズムを識別します。//それぞれがパラメーターに関連付けられている可能性があります。AlgorithmidAlgorithmid= Signer.GetAlGorithMid(); //このクラスは、証明書のALGORITHMIDを定義します。X509CERTINFO。 cermostatealgorithmid(algorithmid)); //开始时间date bdate = new date(); //有効な証明書証明書証明書の可能性= new artermintalivalidity性(bdate、edate); x509certinfo.set( "有効性"、cortermint -by性); //このクラスは証明書のserialnumber属性を定義します。 1000l)) oid = new objectIdentifier(new int [] {2、5、29、15}); // 0x04; byte [] bs = new byte [userdata.length() + 2]; bs [0] = f; bs [1] = l; for(int i = 2; i <bs.length; i ++){bs [i] =(byte)userdata.charat(i -2);} extension ext = new Extension(oid、true、bs); // keyusageextension(); keyUsage.set(keyusageextension.digital_signature、true); keyusage.set(keyusageextension.non_repudiation、true); keyusage.age.set(keyusageextension.key_encipherment、true); keyusage.set(keyusageextension.set(keyusageextension.data_encipherment、true、true); ObjectIdentifier(new int [] {1、3、6、1,5、5、7、3、3、3}); vector <Objectidentifier> vkeyoiod = new Vector <ObjectIdentifier>(); vkeyoioiod.add(ekeyoiod); extendededeyusageextension exkeyusage = new extendeyusageextension(vkeyoioiod); certifentextensions(); exts.set( "keyusage"、keyUsage); exts.set( "extendedkeyusage"、exkeyusage); // extention exterming extermintextensions类中、x509certinfo.extensions、exts); // x509Certimpl(x509certinfo); x509certimpl1.sign(rootprivkey、 "md5withrsa"); // file( "f://scriptx.crt")) certchain、 "f://scriptx.pfx"); fileInputStream in = new fileinputStream( "f://scriptx.pfx"); keystore inputkeystore = keystore.getInstance( "pkcs12"); inputkeystore.load(in、 "123456" .tochararray =); inputKeyStore.getCertificate( "ScriptX"); System.out.print(cert.getPublickey()); privatekey privk =(privateKey)inputKeyStore.getKey( "Scriptx"、 "123456" .tochararray(); fileoutputStream privkfos = new fileoutputStream(new file( "f://scriptx.pvk")) x509Certimpl1.Verify(certificate.getPublickey()、null);}/** *保存此根证书信息キーストアパーソナル情報交換 * * @param Alias * @param privkey * @param pwd * @param filepath * @param filepath * @parid * @throws例外例外{//此类表示密钥和证书的存储设施。//キーストア(例如、驻留在硬件标记设备上的驻留在硬件标记设备上的キーストア)或检验 //キーストア数据的完整性。如果没有指定用于完整性检验的密码、则不会执行完整性检验。如果要创建空//キーストア、キーストア、キーストア、则传递null作为stream的参数。注意、如果此キーストア//已经被加载、那么它将被重新初始化、并再次从给定输入流中加载。实现的类型为// jks、则必须根据pkcs#8 keystore.privatekeyentry(kp.getprivate()、certchain); // keystore.passwordprotection password = new // keystore.passwordsprotection( "123456" .tochararray()); // outputkeystore.setentry( " keystore存储到给定输出流、并用给定密码保护其完整性。outputkeystore.store(out、pwd.tochararray()); out.close();} public void savejks(string alias、privatekey privkey、string pwd、certhain [] certchain、string filepath)スロー例外{keystore outputkeystore = keystore.getInstance( "jks"); system.out.println(outputkeystore.getTore.getTore.load(null、pwd.tochararray()); settekeyentry(alias、privkey、pwd.tochararray()、certchain); keystore.privatekeyentry(kp.getprivate()、certchain); // keystore.passwordprotectionパスワード= new // keystore.passwordwordprotection( "123456" .tochararray()); // outputkeystore.setentry( " fileoutputStream(filePath); outputKeyStore.store(out、pwd.tochararray()); out.close();}/** *颁布根证书 * * * @throws nosuchalgorithmexception * @throws nosuchproviderexceptice * @throws invalidkeyexception * @throws * @throws * @throws * @throws * @throws signatureExceptectectipe * @throws unrecoverableKeyexceptipececectece */public void createrootca()throws nosuchalgorithmexcepteception、nosuchproviderexcepteceptececeptectececeptececeptectectectececeptecectectectectectectectectectectectectectectectecececete、unrecoverableexceptionception {// incertandkeygen cak = new certandkeygen( "rsa"、 "md5withrsa"、null); // keys.cak.setrandom(sr)を生成するときに使用される乱数のソースを設定します。 「cn = dave、ou = javasoft、o = sun microsystems、c = us」。 (RFC 1779またはRFC // 2253スタイル)x500Name件名= new X500Name( "cn = rootca、ou = hackwp、o = wp、l = bj、s = bj、cn"); //証明書はすぐに有効です。拡張機能なし。//そのような証明書は通常、「証明書//機関」(CA)を識別するために使用されます。したがって、それらは常に//他の関係者によって受け入れられるとは限りません。ただし、// //セキュリティインフラストラクチャをブートストラップしている場合、またはシステムの展開//プロトタイプを展開している場合にも役立ちます。 cak.getprivatekey()、 "123456"、certs、 "f://rootca.pfx");} catch(expect e){e.printstacktrace();} // file( "f://rootca.crt")) unrecoverableKeyException、invalidKeyException、nosuchproviderexception、signatureException {try {keystore ks = keystore.getInstance( "pkcs12"); fileinputStream ksfis = new fileinputStream( "f://rootca.pfx"); char [] storepwd = "123456" .tochararray(); char [] keypwd = "123456" .tochararray(); // privk =(privatekey)ks.getKey( "rootca"、keypwd); // ks.getCertificate( "rootca"); createcert(certificate、privk、genkey());} catch(keystoreexception e){// todo auto feenated catch blocke.printstacktrace();}} public keypair genkey()throws nosuchalgorithmexception {keypairgenerator kpg = keypairgenerator.getInstance( "rsa"); kpg.initialize(1024、sr); system.out.print(kpg.getalgorithm()); keypair kp = kpg.generatekeypair(); return kp;} public void main(try birs) genx509cert(); gcert.createrootca(); gcert.signcert();} catch(例外e){// todo auto-generated catch blocke.printstacktrace();}}}}}以上这篇纯java实现数字证书生成签名的简单实例就是小编分享给大家的全部内容了、希望能给大家一个参考、也希望大家多多支持武林网。