社区
Java EE
帖子详情
JAVA 如何生成证书
username_anson
2007-12-03 04:27:09
我现在只有密钥对(公钥/私钥),请问如何生成证书?
有做过证书的朋友,请告诉我一下思路,或者帖代码也行
本人没做过安全系列的编程 ... _ _~
...全文
770
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
生成
X.509 V3
证书
Java
生成
X509 V3
证书
使用
Java
语言
生成
X.509 V3
证书
pem格式
证书
生成
使用
Java
语言
生成
X.509 V3 pem格式
证书
Java
生成
证书
用HTTPS进行访问
文章目录一、CA
证书
是什么?1、 什么是CA?2、 什么是
证书
?3、
证书
生成
过程4、 将数字签名房价到数字
证书
上,变成一个签过名的数字
证书
二、
Java
生成
证书
1.进入JDK的bin目录下,然后输出CMD进入控制台2.
生成
keystore2.
生成
证书
三、无
证书
测试四、配置
证书
一、CA
证书
是什么? 1、 什么是CA? CA全称为Certificate Authority,可以翻译为
证书
颁发机构。主要功能为:
证书
发放、
证书
更新、
证书
撤销和
证书
验证。 2、 什么是
证书
?
证书
指数字
证书
。 数字
证书
又称为数字标
Java
生成
数字
证书
系列(三)
生成
数字
证书
序 前两篇把基本的概念和构成都大致的说了一下,今天这篇文章,主要是讲一下,如何使用
Java
代码
生成
CA
证书
,以及在
生成
证书
的时候,需要设置的一些属性。 正文 废话不多说,直接上内容。 这里使用的是
Java
的 api ,以及第三方的一个组件 —— BC,(Bouncy Castle)。稍微介绍一下 BC,Bouncy Castle 是一种用
java
keytool
生成
证书
_用keytool
生成
证书
1、
证书
查看与删除查看是否已创建过同名的
证书
keytool -list -v -alias ssotest -keystore "%
JAVA
_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit删除已创建的
证书
keytool -delete -aliasssotest -keystore "%
JAVA
_HOME%/JRE/LIB/SECURITY/...
Java
生成
Https
证书
JAVA
生成
HTTPS
证书
简介 通过keytool后缀为.jks的https
证书
,用于调试项目使用。 实现 [
生成
] - 命令
生成
.jks文件 直接在命令行中键入下面的命令 keytool -genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore shfqkeystore.jks 键入后会提下,分别录...
Java EE
67,535
社区成员
225,852
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章