1.
keytool -genkey -keystore chinajavaworld.keystore -alias chinajavaworld
这个命令用来产生一个密匙库,执行完毕后会在当前操作目录中产生一个chinajavaworld.keystore的文件,在执行命令的时候还有提示你输入密匙库的密码,要记住,后面还要用到。
2.
keytool -export -keystore chinajavaworld.keystore
-alias chinajavaworld -file chinajavaworld.cer
这个命令用来产生签名时所要用的证书。
3.在JAVA里操作,将Cer内容改为BASE64编码
//从密钥库中读取CA证书
String storepass = "123456";
//前面设置的密码
FileInputStream in = new FileInputStream("e://license//a//chinajavaworld.keystore"); KeyStore ks = KeyStore.getInstance("JKS"); ks.load(in, storepass.toCharArray());
//获取证书 java.security.cert.Certificate c1 = ks.getCertificate("chinajavaworld");
//BASE64编码 System.out.println(StringUtils.encodeBase64(c1.getEncoded()));
//将chinajavaworld.cer内容改为这里输出的内容
4.开始产生(测试)签名
Signature signature;
try {
InputStream streamCert = new java.io.FileInputStream( "e://license//a//test.cer");
CertificateFactory factory = CertificateFactory.getInstance("X.509");
Certificate cert = factory.generateCertificate(streamCert);
System.out.println(StringUtils.encodeBase64(cert.getEncoded()));
signature = Signature.getInstance("SHA1withDSA");
signature.initVerify(cert.getPublicKey());
//要签名的指纹内容
String sss = "Welcome to www.chinajavaworld.com,The java world for you forever.";
//获取CA证书私钥
PrivateKey priKey=(PrivateKey)ks.getKey("test",storepass.toCharArray());
System.out.println("priKey:"+StringUtils.encodeHex(priKey.getEncoded()));
//用私钥签名
sig = Signature.getInstance("SHA1withDSA");
sig.initSign(priKey);
ByteArrayOutputStream streamRaw0 = new ByteArrayOutputStream();
DataOutputStream streamSig0 = new DataOutputStream(streamRaw0);
streamSig0.writeUTF(sss); sig.update(streamRaw0.toByteArray());
String signatureS = StringUtils.encodeHex(sig.sign());
System.out.println("signature: "+signatureS);
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。