Ⅰ 如何导入.cer证书到Java keystore
1. 如果你想验证你所需要的私钥。有没有其他的选项。 证书是有额外的属性(国家专,...)是由证书颁发机构garants的附加属属性为true签名的公钥。
CER文件证书和没有私钥。私钥设置有。PFX密钥库正常文件。 如果你真的是验证你已经导入了私钥。
你通常可以导入。与任何问题的CER证书 密钥工具-importcert文件certificate.cer-密钥库的keystore.jks别名“别名”
2. 你已经有了该证书可能是服务器的证书,或签名服务器的证书。你会需要它,使您的Web服务客户端端可以验证服务器。 但是,如果你还需要使用SSL进行客户端端身份验证,那么你需要让自己的证书,来验证您的Web服务客户端端。
为此 CodeGo.net,您需要创建一个证书请求,这个过程涉及到创建自己的私有密钥,以及相应的公开密钥,以及安装随着(电子邮件,网站等)的公共密钥这就是所谓的证书请求文件。
Ⅱ 如何编一个Java应用读取XP数字证书库中的cer证书中的信息
这么复杂,还没有分儿。。。帮你顶。关于开发就帮不上你了。
Ⅲ 如何利用java来调用证书(如何实现获取证书公钥以及客服信任号)
package com.security;
import java.io.*;
import java.security.*;
import java.security.cert.*;
import java.util.*;
import java.math.*;
import sun.security.x509.*;
/**
* <>Description: 该程序根据签发者(CA)的证书信息(即CA的私钥)来对被签发者
* 的证书进行签名,过程即是使用CA的证书和被签证书来重构形成一个新的证书</p>
* @author abnerchai
* @version 1.0
*/
public class SignCert {
public static void main(String[] args) throws Exception{
char[] storepass = "100200".toCharArray();
//存放CA证书和被签证书的证书库的访问密码
char[] cakeypass = "200100".toCharArray();//CA数字证书条目的访问密码
String alias = "missionCA";
//CA证书在证书库中的别名,这个CA的证书用来签名其它的证书
String name = "abnerCALib";//存放CA证书和被签证书的证书库的名字
String newLib = "SignedLib";
//新证书库的名字,如果需要将签名后的证书放入新库,这是新库的名字
char[] newLibPass = "100200".toCharArray();//设置新库的访问密码
String cerFileName = "abnerCA.cer";//被签证书的证书文件名
String aliasName = "abnerCA";//被签证书在证书库中的alias别名
char[] namePass = "200100".toCharArray();
//被签证书的条目在证书库的私钥密码
int n =3; //被签证书的有效期,以年为单位,以当前时间开始计算
int sn = 200406001;
//序列号可自己定义,这里定义的意义为2004年6月签发,是本年度CA签发的第多少个以001计算,要求唯一
String afteraliasName = "abnerCA_Signed";
//签名后新产生的被签过名的证书在库中的别名
char[] afterNewPass = "200100".toCharArray();
//签名后新产生的被签过名的证书在库的条目的私钥的密码
//装载证书库
FileInputStream in = new FileInputStream(name);
KeyStore ks = KeyStore.getInstance("JKS");//JKS为证书库的类型
ks.load(in,storepass);
//从证书库中读出签发者(CA)的证书
java.security.cert.Certificate cl = ks.getCertificate(alias);
//读出一个CA证书,这里的l是字母l不是数据字1
PrivateKey privateKey = (PrivateKey)ks.getKey(alias,cakeypass);
//根据别名和证书密码读出CA证书的私钥
in.close();
//从证书库中读出的签发者(CA)的证书中提取签发者的信息
byte[] encodl = cl.getEncoded();//提取证书的编码,这里是字母l不是数据字1
X509CertImpl cimpl = new X509CertImpl(encodl);
//这里是字母l不是数据字1,根据证书的编码创建X509CertImpl类型的对象
//根据上面的对象获得X509CertInfo类型的对象,该对象封装了证书的全部内容。
X509CertInfo cinfo_first =
(X509CertInfo)cimpl.get(X509CertImpl.NAME+"."+X509CertImpl.INFO);
//然后获得X500Name类型的签发者信息
X500Name issuer = (X500Name)
cinfo_first.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME);
//获取待签发的证书,即获取被签发者的证书
//可从密钥库中获取,也可从导出的证书文件中获取,这里给出两种方式 ////////////////////////////////////////////////////////////////////////
//方式一、采用从导出的cer文件中获取 start
///////////////////////////////////////////////////////////////////////////////
/*
CertificateFactory cf = CertificateFactory.getInstance("X.509");
//X.509是使用最多的一种数字证书标准
FileInputStream in2 = new FileInputStream(cerFileName);//被签证书文件
java.security.cert.Certificate c2 = cf.generateCertificate(in2);
//生成需要被签的证书
in2.close();
byte[] encod2 = c2.getEncoded();
X509CertImpl cimp2 = new X509CertImpl(encod2);
//获得被签证书的详细内容,然后根据这个证书生成新证书
X509CertInfo cinfo_second =
(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO);
*/
///////////////////////////////////////////////////////////////////////////////
//end 方式一
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//方式二、从证书库中读出被签的证书 start
///////////////////////////////////////////////////////////////////////////////
java.security.cert.Certificate c3 = ks.getCertificate(aliasName);
//从证书库中读出被签证书,然后生成新的证书
byte[] encod3 = c3.getEncoded();
X509CertImpl cimp3 = new X509CertImpl(encod3);
X509CertInfo cinfo_second =
(X509CertInfo)cimp3.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); ///////////////////////////////////////////////////////////////////////////
//end方式二
/////////////////////////////////////////////////////////////////////////// //设置新证书的有效期,使之为当前向后n年有效,新证书的
//截止日期不能超过CA证书的有效日期
Date beginDate = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(beginDate);
cal.add(cal.YEAR,n);
Date endDate = cal.getTime();
CertificateValidity cv = new CertificateValidity(beginDate,endDate);
cinfo_second.set(X509CertInfo.VALIDITY,cv);
//设置新证书的序列号
CertificateSerialNumber csn = new CertificateSerialNumber(sn);
cinfo_second.set(X509CertInfo.SERIAL_NUMBER,csn);
//设置新证书的签发者
cinfo_second.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);
//新的签发者是CA的证书中读出来的
//设置新证书的算法,指定CA签名该证书所使用的算法为md5WithRSA
AlgorithmId algorithm = new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
cinfo_second.set(CertificateAlgorithmId.NAME+"."+
CertificateAlgorithmId.ALGORITHM,algorithm);
//创建新的签名后的证书
X509CertImpl newcert = new X509CertImpl(cinfo_second);
//签名,使用CA证书的私钥进行签名,签名使用的算法为MD5WithRSA
newcert.sign(privateKey,"MD5WithRSA");//这样便得到了经过CA签名后的证书
//把新证书存入证书库
//把新生成的证书存入一个新的证书库,也可以存入原证书库,
//存入新证书库,则新证书库中不仅包含原证书库中的所有条目,
//而且新增加了一个这次产生的条目。注意,这时,新产生的签名后的证书只
//包括公钥和主体信息及签名信息,不包括私钥信息。这里给出两种方式。
///////////////////////////////////////////////////////////////////////////
//方式一:存入新密钥库
///////////////////////////////////////////////////////////////////////////
/*
ks.setCertificateEntry(afteraliasName,newcert);
FileOutputStream out = new FileOutputStream(newLib);
//存入新库signedLib,并设置新库的库访问密码
ks.store(out,newLibPass);
out.close();
*/
///////////////////////////////////////////////////////////////////////////
//end 方式一
///////////////////////////////////////////////////////////////////////////
//也可以采用另外一种方式,存入原证书库中
//存入原库中,即在原证书库中增加一条证书,这个证书是原证书经过签名后的证书
//这个新证书含有私钥和私钥密码
///////////////////////////////////////////////////////////////////////////
//方式二,存入原密钥库
///////////////////////////////////////////////////////////////////////////
//先在原库中读出被签证书的私钥
PrivateKey prk = (PrivateKey)ks.getKey(aliasName,namePass);
java.security.cert.Certificate[] cchain = {newcert};
//存入原来的库,第二个参数为原证书的私钥,第三个参数为新证书的私钥密码,第三个参数为新证书
ks.setKeyEntry(afteraliasName,prk,afterNewPass,cchain); //用新密钥替代原来的没有签名的证书的密码
FileOutputStream out2 = new FileOutputStream(name);
ks.store(out2,storepass);//存入原来的库中,第二个参数为该库的访问密码
///////////////////////////////////////////////////////////////////////////
//end 方式二
///////////////////////////////////////////////////////////////////////////
}
}
Ⅳ java,已知加密字符串,怎么生成cer文件求代码
packagecom.tgtbj.dsf.certhelper;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.math.BigInteger;
importjava.security.KeyPair;
importjava.security.KeyPairGenerator;
importjava.security.KeyStore;
importjava.security.cert.Certificate;
importjava.security.cert.CertificateEncodingException;
importjava.security.cert.X509Certificate;
importjava.util.Date;
importjavax.security.auth.x500.X500Principal;
importorg.bouncycastle.x509.X509V3CertificateGenerator;
publicclassTT{
publicstaticvoidgenCertFile(StringcertPath,Stringpassword,
intkeysize,Stringalgorithm)throwsException{
//创建KeyStore
KeyStorestore=KeyStore.getInstance("PKCS12");
store.load(null,null);
//生成一对公私钥,这部分如果自己已经有了PublicKey,可以直接在下面使用,不用生成
KeyPairGeneratorkpg=KeyPairGenerator.getInstance("RSA");
kpg.initialize(keysize);
KeyPairkeyPair=kpg.generateKeyPair();
//这个字符串根据自己情况填
Stringissuer="C=CN,ST=BJ,L=BJ,O=SSS,OU=SC,CN=SSS";
Stringsubject=issuer;
=newX509V3CertificateGenerator();
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
certGen.setIssuerDN(newX500Principal(issuer));
certGen.setNotBefore(newDate(System.currentTimeMillis()-10*365
*24*60*60*1000));
certGen.setNotAfter(newDate(System.currentTimeMillis()+10*365*24
*60*60*1000));
certGen.setSubjectDN(newX500Principal(subject));
certGen.setPublicKey(keyPair.getPublic());//此处可直接传入线程的PublicKey
if(algorithm==null||algorithm.equals("")){
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
}else{
certGen.setSignatureAlgorithm(algorithm);
}
X509Certificatecert=certGen.generateX509Certificate(keyPair
.getPrivate());
//私钥有现成的也可直接传入
store.setKeyEntry("alias",keyPair.getPrivate(),
password.toCharArray(),newCertificate[]{cert});
//导出为cer证书
try{
FileOutputStreamfos=newFileOutputStream(certPath+".cer");
fos.write(cert.getEncoded());
fos.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(CertificateEncodingExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(Stringargs[])throwsException{
genCertFile("D:/opop1","qwafrt",1024,"SHA1WithRSA");
}
}
Ⅳ java中 用到.cer的安全证书,如何通过openssl来生成这个证书
openssl貌似 linux系统里用的多, 也可以用java的keytool生成,jdk自带的.
Ⅵ 有谁对Java或者C的 数字签名 cer证书 密钥 加密算法 这些技术熟悉和了解的,能否简单介绍一下!
我在凭安网络这家公司做开发, 刚刚入职, 该公司做的主要是安全方面的。
完整性: 是指一般意义上的数据完整性,手段不外乎使用更改检测码(modification detection code, MDC, 可以用哈希函数来实现),所以保护手段就相对比较成熟. 目前在研究与实践中很热门的"可信计算"(Trusted Computing)方法就是将一个软件代码的MDC哈希值存入计算平台上的一个密码芯片中保护起来.
不可抵赖性: 电子交易各方在交易完成时要保证的不可抵赖性:在传输数据时必须携带含有自身特质、别人无法复制的信息,防止交易发生后对行为的否认。
对称加解密原理: 五个组成部分
明文
加密算法
密钥
密文
解密算法、
对称密钥加密,又称私钥加密或会话密钥加密算法,即信息的发送方和接收方使用同一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。
非对称性加解密算法:允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”
非对称密钥加密系统,又称公钥密钥加密。它需要使用不同的密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。
数字信封:数字信封是将对称密钥通过非对称加密(即:有公钥和私钥两个)的结果分发对称密钥的方法
签名:就是在应用程序的特定字段写入特定的标记信息,表示该软件已经通过了签署者的审核。签署者对该软件的安全性负责
书籍:网络安全基础应用于标准 (我现在就在看这本书)
可能有一些的概念理解不到位, 请见谅。
Ⅶ 如何在java创建证书PFX文件吗
开发人员通常需要将PFX文件转换为某些不同的格式,如PEM或JKS,以便可以为使用版SSL通信的独立Java客户端或权WebLogic Server使用
在Security编程中,有几种典型的密码交换信息文件格式:
DER-encoded certificate: .cer, .crt
PEM-encoded message: .pem
PKCS#12 Personal Information Exchange: .pfx, .p12
PKCS#10 Certification Request: .p10
PKCS#7 cert request response: .p7r
PKCS#7 binary message: .p7b
Ⅷ 如何把安全证书导入到java中的cacerts证书库
把安全证书导入到java中的cacerts证书库步骤:
1、先下载证书,然后使用命令导入
已经完成了证书的导入。
Ⅸ 在java中使用安全证书的问题
在项目开发中,有时会遇到与SSL安全证书导入打交道的,如何把证书导入java中的cacerts证书库呢?
其实很简单,方法如下:
每一步:进入某个https://www.xxx.com开头的网站,把要导入的证书下载过来,
在该网页上右键 >> 属性>> 点击"证书">>
再点击上面的"详细信息"切换栏 >>
再点击右下角那个"复制到文件"的按钮
就会弹出一个证书导出的向导对话框,按提示一步一步完成就行了。
例如:保存为abc.cer,放在C盘下
第二步:如何把上面那步的(abc.cer)这个证书导入java中的cacerts证书库里?
方法如下
假设你的jdk安装在C:\jdk1.5这个目录,
开始 >> 运行>> 输入cmd 进入dos命令行>>
再用cd进入到C:\jdk1.5\jre\lib\security这个目录下
敲入如下命令回车执行
keytool -import -alias cacerts -keystore cacerts -file d:\software\AKAZAM-Mail.cer
此时命令行会提示你输入cacerts证书库的密码,
你敲入changeit就行了,这是java中cacerts证书库的默认密码,
你自已也可以修改的。
导入后用-list查看(没有使用-alias指定别名,所以是mykey),其中md5会和证书的md5对应上。
mykey, 2012-10-26, trustedCertEntry,
认证指纹 (MD5): 8D:A2:89:9A:E4:17:07:0B:BD:B0:0C:36:11:39:D0:3D
ok,大功告成!
以后更新时,先删除原来的证书,然后导入新的证书
keytool -list -keystore cacerts
keytool -delete -alias akazam_email -keystore cacerts
keytool -import -alias akazam_email -file akazam_email.cer -keystore cacerts
自定义文件和密码路径,还没有验证:
Define the TrustStore using the JAVA_OPTS variable on the Stash Server:
You will have to do the following:
On Windows:
JAVA_OPTS = -Djavax.net.ssl.trustStore="%JAVA_HOME%\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword="changeit"
On Linux:
JAVA_OPTS = -Djavax.net.ssl.trustStore="$JAVA_HOME/jre/lib/security/cacerts" -Djavax.net.ssl.trustStorePassword="changeit"
(info) On my local instance trustStore password is changeit so I belive, if you didn´t changed it, your is changeit as well.
tomcat、junit运行时会从默认路径加载cacerts文件,如果main函数直接运行需要指定javax.net.ssl.trustStore文件路径,比如:
java -Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts -jar XXX.jar &
Ⅹ 如何把安全证书导入/删除 java中的cacerts证书库
每一步:进入某个开头的网站,把要导入的证书下载过来,
在该网页上右键 >> 属性 >> 点击"证书" >>
再点击上面的"详细信息"切换栏 >>
再点击右下角那个"复制到文件"的按钮
就会弹出一个证书导出的向导对话框,按提示一步一步完成就行了。
例如:保存为abc.cer,放在C盘下
第二步:如何把上面那步的(abc.cer)这个证书导入java中的cacerts证书库里?
方法如下
假设你的jdk安装在C:\jdk1.5这个目录,
开始 >> 运行 >> 输入cmd 进入dos命令行 >>
再用cd进入到C:\jdk1.5\jre\lib\security这个目录下
敲入如下命令回车执行
keytool -import -alias cacerts -keystore cacerts -file d:\software\AKAZAM-Mail.cer -trustcacerts
此时命令行会提示你输入cacerts证书库的密码,
你敲入changeit就行了,这是java中cacerts证书库的默认密码,
你自已也可以修改的。
ok,大功告成!
以后更新时,先删除原来的证书,然后导入新的证书
keytool -list -keystore cacerts
keytool -delete -alias akazam_email -keystore cacerts
keytool -import -alias akazam_email -file akazam_email.cer -keystore cacerts -trustcacerts