社区
Java EE
帖子详情
JAVA 如何生成证书
username_anson
2007-12-03 04:27:09
我现在只有密钥对(公钥/私钥),请问如何生成证书?
有做过证书的朋友,请告诉我一下思路,或者帖代码也行
本人没做过安全系列的编程 ... _ _~
...全文
737
2
打赏
收藏
JAVA 如何生成证书
我现在只有密钥对(公钥/私钥),请问如何生成证书? 有做过证书的朋友,请告诉我一下思路,或者帖代码也行 本人没做过安全系列的编程 ... _ _~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hletters
2007-12-04
打赏
举报
回复
加密函数写成:
public static void crypt(byte[] cipherText,String outFileName){
try{
DESKeySpec desKeySpec = new DESKeySpec(desKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cdes = Cipher.getInstance("DES");
cdes.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] ct = cdes.doFinal(cipherText);
try{
FileOutputStream out=new FileOutputStream(outFileName);
out.write(ct);
out.close();
}catch(IOException e){
e.printStackTrace();
}
}catch (Exception e){
e.printStackTrace();
}
}
其中ct就是加密后的内容,outFileName保存加密后文件的文件名。把cdes.init(Cipher.ENCRYPT_MODE, secretKey)换成cdes.init(Cipher.DECRYPT_MODE, secretKey)就是解密文件了。
文件加密后就要对文件签名,保证A发送到B的文件不可伪造。下面是用存放在.keystore中的私钥进行签名的函数,签名使用的摘要算法是MD5。其中sigText是被签名内容的输入数组,outFileName是保存签名后输出文件的名称,KeyPassword是读取Keystore使用的密码,KeyStorePath是存放.keystore文件的路径,函数代码如下:
public static void sig(byte[] sigText, String outFileName,String
KeyPassword,String KeyStorePath){
char[] kpass;
int i;
try{
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream ksfis = new FileInputStream(KeyStorePath);
BufferedInputStream ksbufin = new BufferedInputStream(ksfis);
kpass=new char[KeyPassword.length()];
for(i=0;i<KeyPassword.length();i++)
kpass[i]=KeyPassword.charAt(i);
ks.load(ksbufin, kpass);
PrivateKey priv = (PrivateKey) ks.getKey(KeystoreAlias,kpass );
Signature rsa=Signature.getInstance("MD5withRSA");
rsa.initSign(priv);
rsa.update(sigText);
byte[] sig=rsa.sign();
System.out.println("sig is done");
try{
FileOutputStream out=new FileOutputStream(outFileName);
out.write(sig);
out.close();
}catch(IOException e){
e.printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
}
}
验证签名需要存放签名文件和被签名的文件以及证书,其中,updateData存放被签名文件的内容,sigedText存放得到的签名内容,CertName是证书名。验证签名代码如下:
public static void veriSig(byte[] updateData, byte[] sigedText){
try{
CertificateFactory
certificatefactory=CertificateFactory.getInstance("X.509");
FileInputStream fin=new FileInputStream(CertName);
X509Certificate
certificate=(X509Certificate)certificatefactory.generateCertificate(fin);
PublicKey pub = certificate.getPublicKey();
Signature rsa=Signature.getInstance("MD5withRSA");
rsa.initVerify(pub);
rsa.update(updateData);
boolean verifies=rsa.verify(sigedText);
System.out.println("verified "+verifies);
if(verifies){
System.out.println("Verify is done!");
}else{
System.out.println("verify is not successful");
}
}catch(Exception e){
e.printStackTrace();
}
}
可以用keytool产生两个自签的签名证书,或者到某个CA去申请两个证书。用Java编写加密和验证程序,上述例子只是一个非常简单的证书应用,实际协议对证书的使用(比如SSL)要比这个复杂多了。
hletters
2007-12-04
打赏
举报
回复
下面产生一个自签证书。安装完J2SDK(这里用的是J2SDK1.4)后,在J2SDK安装目录的bin目录下,有一个keytool的可执行程序。利用keytool产生自签证书的步骤如下:
第一步,用-genkey命令选项,产生公私密钥对。在控制台界面输入:keytool -genkey -alias testkeypair -keyalg RSA -keysize 1024 -sigalg MD5withRSA。这里的-alias表示使用这对公私密钥产生新的keystore入口的别名(keystore是用来存放管理密钥对和证书链的,缺省位置是在使用者主目录下,以.keystore为名的隐藏文件,当然也可指定某个路径存放.keystore文件);-keyalg是产生公私钥对所用的算法,这里是RSA;-keysize定义密钥的长度;-sigalg是签名算法,选择MD5withRSA,即用RSA签名,然后用MD5哈希算法摘要。接下来,系统会提示进行一些输入:
输入keystore密码: abc123
您的名字与姓氏是什么?
[Unknown]: Li
您的组织单位名称是什么?
[Unknown]: InfosecLab
您的组织名称是什么?
[Unknown]: InfosecLab Group
您所在的城市或区域名称是什么?
[Unknown]: Beijing
您所在的州或省份名称是什么?
[Unknown]: Beijing
该单位的两字母国家代码是什么
[Unknown]: CN
CN=Li, OU=InfosecLab, O=InfosecLab Group, L=Beijing, ST=Beijing, C=CN 正确吗?
[否]: y
输入<testkeypair>的主密码 (如果和 keystore 密码相同,按回车):
第二步,产生自签证书,输入以下命令:
keytool -selfcert -alias testkeypair -dname "CN=Li, OU=InfosecLab, O=InfosecLab
Group, L=Beijing, ST=Beijing, C=CN"
输入keystore密码: abc123
第三步,导出自签证书,由上面两步产生的证书,已经存放在以“testkeypair”为别名的keystore入口了,如果使用其文件,必须导出证书。输入:
keytool -export -rfc -alias testkeypair -file mycert.crt
输入keystore密码: abc123
保存在文件中的认证 <mycert.crt>
这样,就得到了一个自签的证书mycert.crt。注意,选项rfc是把证书输出为RFC1421定义的、用Base64最终编码的格式。
JAVA
_API1.6文档(中文)
java
.security.cert 提供用于解析和管理
证书
、
证书
撤消列表 (CRL) 和
证书
路径的类和接口。
java
.security.interfaces 提供的接口用于
生成
RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
java
源码包---
java
源码 大量 实例
Java
生成
密钥、保存密钥的实例源码,通过本源码可以了解到
Java
如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用
Java
对象序列化保存私钥...
使用truelicense实现用于
JAVA
工程license机制(包括license
生成
和验证)
总的来说,TrueLicense为
Java
开发者提供了一套强大的许可证管理系统,通过它,你可以轻松地在你的项目中实现许可证的
生成
和验证,有效保护软件权益。结合提供的`LicenseCreate`和`LicenseVerify`示例代码,你可以...
Java
生成
证书
用HTTPS进行访问
3、
证书
生成
过程4、 将数字签名房价到数字
证书
上,变成一个签过名的数字
证书
二、
Java
生成
证书
1.进入JDK的bin目录下,然后输出CMD进入控制台2.
生成
keystore2.
生成
证书
三、无
证书
测试四、配置
证书
一、CA
证书
是什么...
使用
java
生成
证书
使用
java
生成
证书
执行 keytool -genkeypair -alias mytest -keyalg RSA -keypass mypass -keystore mytest.jks -storepass mypass mytest 是
证书
的别名, 两个mypass是密码, 执行完成后会
生成
mytest.jks文件 导出...
Java EE
67,541
社区成员
225,854
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章