如何用已有的证书文件和私钥文件生成keystore-CSDN论坛
2个回答
展开全部
(1)Openssl公私钥
使用Openssl公钥私钥用于外部商户系统xxx系统间报文安全性验证使用者需要公私钥直接报文进行处理则参考第四部计算摘要及签名值
1. 安装openssl步骤直接点击exe文件现需要安装vs2008插件直接忽略
2. 安装程找OpenSSL相应安装目录进入bin目录找openssl.exe执行文件点击运行别按顺序输入命令:
a. genrsa –out private-rsa.key 1024
说明:该命令没加密私钥
genrsa 私钥文件私钥存储private-rsa.key度1024out面指定输文件名
private-rsa.key 私钥文件该文件必须经处理私钥
b. req –new –x509 –key private-rsa.key –days 750 –outpublic-rsa.cer
说明:根据private-rsa.key证书public-rsa.cer
-new 表示新请求
-509 表示输证书结构
750表示证书效数
-out public-rsa.cer -out面表示公钥证书用于验证数字签名公钥证书或者公钥需要提前发送给需要验证本单位或部门数据接收
c. pkcs12 –export –name test-alias –in public-rsa.cer–inkey private-rsa.key –out 99bill-rsa.pfx
说明:PKCS12 格式Keystore
密码前输入要致密码用Keystore公私钥程用
Public-rsa.cer, private-rsa.key前
附1:
述代码99bill-rsa.pfx获取私钥Java版本代码private-rsa.key私钥直接使用必须进行定处理
代码几注意点:
文件流初始化路径需要根据自实际路径填写
密码第二节c步骤密码本实例输入suning
KeyStorekeyStore = KeyStore.getInstance("PKCS12");
FileInputStreamfileInputStream = newFileInputStream("D:/OpenSSL/bin/99bill-rsa.pfx");
char[]nPassword = "suning".toCharArray();
StringkeyAlias = null;
keyStore.load(fileInputStream,nPassword);
fileInputStream.close();
System.out.println("keystoretype=" + keyStore.getType());
Enumerationenumeration = keyStore.aliases();
if(enumeration.hasMoreElements())
{
keyAlias = (String) enumeration.nextElement();
System.out.println("alias=[" + keyAlias +"]");
}
System.out.println("iskey entry=" + keyStore.isKeyEntry(keyAlias));
PrivateKeyprikey = (PrivateKey) keyStore.getKey(keyAlias, nPassword);
//私钥转字符串
StringprivateStr = Base64.encodeBase64String(prikey.getEncoded()).trim();
//公钥字符串通cer证书
Certificatecert = keyStore.getCertificate(keyAlias);
PublicKeypubkey = cert.getPublicKey();
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
注意:
1. 所用类说明:
Base64:
import org.apache.commons.net.util.Base64;
Certificate:
import java.security.cert.Certificate;
2. openssl公私钥程用户输入密码本例密码suning
1. 摘要及
摘要程(digest全部实现述3程):
1. 根据key传map数据排序;
2. a1=b1&a2=b2&a3=b3形式字符串排除某些字符串Key值;
3. 调用digest进行md5编码;
三步均通Digest.digest()实现:
String digest = Digest.digest(Map map, String... keys);
传递http报文体body内容a1=b1&a2=b2&a3=b3形式字符串提取需要加签字符串并转map形式execludeKes要排除字段字符串数组
计算摘要步关键选取字段要求发送接收必须致即发送哪些字段计算摘要同接收必须相同字段计算摘要否则报6601错误
说明:a. Map存储计算摘要字段
b. keys表示排除字段能用于计算摘要字段signature,signAlgorithm
2. 公钥证书及字符串转换
转换目:便于存储(商户直接提供公钥证书于向验签系统提供公钥字符串商户需要用述代码公钥转字符串)
1. 公钥/私钥字符串转公钥/私钥主要字符串转公钥PublicKey
X509EncodedKeySpec pubKeySpec = newX509EncodedKeySpec(Base64.decodeBase64(strPubKey));
KeyFactorykeyFactory = KeyFactory.getInstance(RSA);
PublicKeypubKey = keyFactory.generatePublic(pubKeySpec);
2. 公钥或私钥转Base64字符串:
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
3. 公私钥验证
验证目:公私钥需要验证否匹配(前许商户公私钥混乱确定公私钥否匹配添加验签系统)代码由用户自用junit验证运行验证公私钥否确resulttrue则说明公私钥确;否则公私钥问题能使用
String prik1 ="";
String pubb ="";
String data ="wkk";
String digest =Digest.digest(data);
PrivateKey privateKey =RSAUtil.getPrivateKey(prik1);
String sign =RSAUtil.sign(digest, privateKey);
boolean result =RSAUtil.vertiy(digest, sign,
RSAUtil.getPublicKey(pubb));
System.out.println(result);
使用Openssl公钥私钥用于外部商户系统xxx系统间报文安全性验证使用者需要公私钥直接报文进行处理则参考第四部计算摘要及签名值
1. 安装openssl步骤直接点击exe文件现需要安装vs2008插件直接忽略
2. 安装程找OpenSSL相应安装目录进入bin目录找openssl.exe执行文件点击运行别按顺序输入命令:
a. genrsa –out private-rsa.key 1024
说明:该命令没加密私钥
genrsa 私钥文件私钥存储private-rsa.key度1024out面指定输文件名
private-rsa.key 私钥文件该文件必须经处理私钥
b. req –new –x509 –key private-rsa.key –days 750 –outpublic-rsa.cer
说明:根据private-rsa.key证书public-rsa.cer
-new 表示新请求
-509 表示输证书结构
750表示证书效数
-out public-rsa.cer -out面表示公钥证书用于验证数字签名公钥证书或者公钥需要提前发送给需要验证本单位或部门数据接收
c. pkcs12 –export –name test-alias –in public-rsa.cer–inkey private-rsa.key –out 99bill-rsa.pfx
说明:PKCS12 格式Keystore
密码前输入要致密码用Keystore公私钥程用
Public-rsa.cer, private-rsa.key前
附1:
述代码99bill-rsa.pfx获取私钥Java版本代码private-rsa.key私钥直接使用必须进行定处理
代码几注意点:
文件流初始化路径需要根据自实际路径填写
密码第二节c步骤密码本实例输入suning
KeyStorekeyStore = KeyStore.getInstance("PKCS12");
FileInputStreamfileInputStream = newFileInputStream("D:/OpenSSL/bin/99bill-rsa.pfx");
char[]nPassword = "suning".toCharArray();
StringkeyAlias = null;
keyStore.load(fileInputStream,nPassword);
fileInputStream.close();
System.out.println("keystoretype=" + keyStore.getType());
Enumerationenumeration = keyStore.aliases();
if(enumeration.hasMoreElements())
{
keyAlias = (String) enumeration.nextElement();
System.out.println("alias=[" + keyAlias +"]");
}
System.out.println("iskey entry=" + keyStore.isKeyEntry(keyAlias));
PrivateKeyprikey = (PrivateKey) keyStore.getKey(keyAlias, nPassword);
//私钥转字符串
StringprivateStr = Base64.encodeBase64String(prikey.getEncoded()).trim();
//公钥字符串通cer证书
Certificatecert = keyStore.getCertificate(keyAlias);
PublicKeypubkey = cert.getPublicKey();
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
注意:
1. 所用类说明:
Base64:
import org.apache.commons.net.util.Base64;
Certificate:
import java.security.cert.Certificate;
2. openssl公私钥程用户输入密码本例密码suning
1. 摘要及
摘要程(digest全部实现述3程):
1. 根据key传map数据排序;
2. a1=b1&a2=b2&a3=b3形式字符串排除某些字符串Key值;
3. 调用digest进行md5编码;
三步均通Digest.digest()实现:
String digest = Digest.digest(Map map, String... keys);
传递http报文体body内容a1=b1&a2=b2&a3=b3形式字符串提取需要加签字符串并转map形式execludeKes要排除字段字符串数组
计算摘要步关键选取字段要求发送接收必须致即发送哪些字段计算摘要同接收必须相同字段计算摘要否则报6601错误
说明:a. Map存储计算摘要字段
b. keys表示排除字段能用于计算摘要字段signature,signAlgorithm
2. 公钥证书及字符串转换
转换目:便于存储(商户直接提供公钥证书于向验签系统提供公钥字符串商户需要用述代码公钥转字符串)
1. 公钥/私钥字符串转公钥/私钥主要字符串转公钥PublicKey
X509EncodedKeySpec pubKeySpec = newX509EncodedKeySpec(Base64.decodeBase64(strPubKey));
KeyFactorykeyFactory = KeyFactory.getInstance(RSA);
PublicKeypubKey = keyFactory.generatePublic(pubKeySpec);
2. 公钥或私钥转Base64字符串:
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
3. 公私钥验证
验证目:公私钥需要验证否匹配(前许商户公私钥混乱确定公私钥否匹配添加验签系统)代码由用户自用junit验证运行验证公私钥否确resulttrue则说明公私钥确;否则公私钥问题能使用
String prik1 ="";
String pubb ="";
String data ="wkk";
String digest =Digest.digest(data);
PrivateKey privateKey =RSAUtil.getPrivateKey(prik1);
String sign =RSAUtil.sign(digest, privateKey);
boolean result =RSAUtil.vertiy(digest, sign,
RSAUtil.getPublicKey(pubb));
System.out.println(result);
展开全部
Java KeyStore类型
JKSJCEKSJava密钥库(KeyStore)两种比较见类型(我所知道共5种JKS, JCEKS, PKCS12, BKSUBER)
JKSProviderSUN每版本JDK都JCEKSProviderSUNJCE1.4我都能够直接使用
JCEKS安全级别要比JKS强使用ProviderJCEKS(推荐)尤其保护KeyStore私钥(使用TripleDes)
PKCS#12公钥加密标准规定包含所私钥、公钥证书其二进制格式存储称 PFX 文件windows直接导入密钥区注意PKCS#12密钥库保护密码同用于保护Key
BKS
自BouncyCastle
Provider使用TripleDES保护密钥库Key能够防止证书库修改(Keystorekeyentry改掉1
bit都产错误)BKS能够跟JKS互操作读者用KeytoolTryTry
UBER
比较特别密码通命令行提供候能跟keytool交互整keystore通PBE/SHA1/Twofish加密
keystore能够防止误改、察看及校验前Sun
JDK(提供者SUN)允许提供密码情况直接加载Keystore类似cacertsUBER允许种情况
证书导入
Der/Cer证书导入:
要某文件导入某证书使用keytool工具-import命令:
1
keytool
-import -file
mycert.der -keystore mykeystore.jks
-keystore 选项指定并存密钥仓库则该密钥仓库创建
指定 -keystore 选项则缺省密钥仓库宿主目录名 .keystore 文件该文件并存则创建
创建密钥仓库要求输入访问口令需要使用口令访问使用-list命令查看密钥仓库内容:
1
keytool
-list -rfc -keystore mykeystore.jks
P12格式证书导入:
keytool直接导入PKCS12文件
第种使用IEpfx证书导入再导cert格式文件使用面介绍其导入密钥仓库仓库面包含证书信息没私钥内容
第二种pfx文件导入IE浏览器再导pfx文件新pfx能导入keystore报错:keytool错误:java.lang.Exception:
所输入 X.509 认证新pfx文件作keystore使用报错误as
unknown attr1.3.6.1.4.1.311.17.1,查资料,说IE导,使用Netscape错误.
第三种pfx文件作keystore使用通微软证书管理控制台pfx文件能直接使用keytool认格式报keytool错误:java.io.IOException:
failed to decrypt safe contents entry需要通OpenSSL转换:
1
openssl
pkcs12 -in mycerts.pfx -out mycerts.pem
2
openssl
pkcs12 -export -in mycerts.pem -out mykeystore.p12
通keytool-list命令检查密钥仓库内容:
1
keytool
-rfc -list -keystore mykeystore.p12 -storetype pkcs12
需要指明仓库类型pkcs12缺省类型jks密钥仓库即包含证书信息包含私钥信息
P7B格式证书导入:
keytool直接导入p7b文件
需要证书链RootServer.p7b(包含根证书)导根rootca.cerrootcaserver.cer
两证书导入信任密钥仓库
1
keytool
-import -alias
rootca -trustcacerts -file rootca.cer -keystore testkeytrust.jks
遇否信任该证书提示输入y
1
keytool
-import -alias
rootcaserver -trustcacerts -file rootcaserver.cer -keystore testkeytrust.jks
总结
P12格式证书能使用keytool工具导入keystore
The Sun's PKCS12 KeystoreIE其windows程序pfx格式证书支持太.
P7B证书链能直接导入keystore需要面证书导cer格式再别导入keystore
JKSJCEKSJava密钥库(KeyStore)两种比较见类型(我所知道共5种JKS, JCEKS, PKCS12, BKSUBER)
JKSProviderSUN每版本JDK都JCEKSProviderSUNJCE1.4我都能够直接使用
JCEKS安全级别要比JKS强使用ProviderJCEKS(推荐)尤其保护KeyStore私钥(使用TripleDes)
PKCS#12公钥加密标准规定包含所私钥、公钥证书其二进制格式存储称 PFX 文件windows直接导入密钥区注意PKCS#12密钥库保护密码同用于保护Key
BKS
自BouncyCastle
Provider使用TripleDES保护密钥库Key能够防止证书库修改(Keystorekeyentry改掉1
bit都产错误)BKS能够跟JKS互操作读者用KeytoolTryTry
UBER
比较特别密码通命令行提供候能跟keytool交互整keystore通PBE/SHA1/Twofish加密
keystore能够防止误改、察看及校验前Sun
JDK(提供者SUN)允许提供密码情况直接加载Keystore类似cacertsUBER允许种情况
证书导入
Der/Cer证书导入:
要某文件导入某证书使用keytool工具-import命令:
1
keytool
-import -file
mycert.der -keystore mykeystore.jks
-keystore 选项指定并存密钥仓库则该密钥仓库创建
指定 -keystore 选项则缺省密钥仓库宿主目录名 .keystore 文件该文件并存则创建
创建密钥仓库要求输入访问口令需要使用口令访问使用-list命令查看密钥仓库内容:
1
keytool
-list -rfc -keystore mykeystore.jks
P12格式证书导入:
keytool直接导入PKCS12文件
第种使用IEpfx证书导入再导cert格式文件使用面介绍其导入密钥仓库仓库面包含证书信息没私钥内容
第二种pfx文件导入IE浏览器再导pfx文件新pfx能导入keystore报错:keytool错误:java.lang.Exception:
所输入 X.509 认证新pfx文件作keystore使用报错误as
unknown attr1.3.6.1.4.1.311.17.1,查资料,说IE导,使用Netscape错误.
第三种pfx文件作keystore使用通微软证书管理控制台pfx文件能直接使用keytool认格式报keytool错误:java.io.IOException:
failed to decrypt safe contents entry需要通OpenSSL转换:
1
openssl
pkcs12 -in mycerts.pfx -out mycerts.pem
2
openssl
pkcs12 -export -in mycerts.pem -out mykeystore.p12
通keytool-list命令检查密钥仓库内容:
1
keytool
-rfc -list -keystore mykeystore.p12 -storetype pkcs12
需要指明仓库类型pkcs12缺省类型jks密钥仓库即包含证书信息包含私钥信息
P7B格式证书导入:
keytool直接导入p7b文件
需要证书链RootServer.p7b(包含根证书)导根rootca.cerrootcaserver.cer
两证书导入信任密钥仓库
1
keytool
-import -alias
rootca -trustcacerts -file rootca.cer -keystore testkeytrust.jks
遇否信任该证书提示输入y
1
keytool
-import -alias
rootcaserver -trustcacerts -file rootcaserver.cer -keystore testkeytrust.jks
总结
P12格式证书能使用keytool工具导入keystore
The Sun's PKCS12 KeystoreIE其windows程序pfx格式证书支持太.
P7B证书链能直接导入keystore需要面证书导cer格式再别导入keystore
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询