如何用已有的证书文件和私钥文件生成keystore-CSDN论坛

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用已有的证书文件和私钥文件生成keystore-CSDN论坛相关的知识,希望对你有一定的参考价值。

(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);
参考技术A 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

ActiveMQ配置ssl安全连接

参考技术A

**生成服务端私钥,并导入到服务端keyStore文件中,此操作生成broker1.ks文件,保存服务端私钥,供服务端使用。 **

**根据服务端私钥导出服务端证书,此操作生成broker_cert文件,该文件为服务端的证书。 **

**导入服务端证书到客户端的Trust keyStore中。此操作生成client.ts文件,保存服务端证书,供客户端使用。 **

**生成客户端私钥,并且导入到客户端keyStore文件中,此操作生成client1.ks文件,保存客户端私钥,供客户端使用。 **

根据客户端私钥导出客户端证书。

导入客户端证书到服务端的Trust keyStore中,此操作生成broker1.ts文件,保存客户端证书,供服务端使用。

证书到此生成完毕

将broker1.ks,borker1.ts,放在$activemq.base/conf目录下

==$activemq.base== activemq的根目录

在transportConnectors同级元素中(broker元素内)添加sslContext元素

transportConnectors中添加ssl连接

重启activemq

以上是关于如何用已有的证书文件和私钥文件生成keystore-CSDN论坛的主要内容,如果未能解决你的问题,请参考以下文章

从jks证书中提取公钥和私钥(jks证书转pem证书)

如何用makecert生成数字证书!

openssl生成perm文件

RSA公钥、私钥生成,详细讲解

OpenSSL 下载和私钥证书CERTIFICATE证书生成

未找到具有有效签名身份(即证书和私钥对)的配置文件