您可以使用Java的keytool
创建包含根CA的PKCS#12密钥存储库:
keytool -importcert -trustcacerts -keystore keystore.p12 -storetype pkcs12 \
-alias root -file root.crt
系统将提示您输入一个密码,该密码将用于保护密钥存储的完整性,以便任何人都不能在未被检测到的情况下修改您的信任锚点。您可以使用另一个选项指定密码,但这很可能会在系统上留下密码的记录。
在这里,-trustcacerts
表示您信任作为认证机构导入的证书。如果您漏掉了这个,证书就会显示出来,并且会提示您审核并接受它。
static void createTrustStore(Path certificate, Path keystore, char[] password)
throws IOException, GeneralSecurityException {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate root;
try (InputStream is = Files.newInputStream(certificate)) {
root = cf.generateCertificate(is);
}
KeyStore pkcs12 = KeyStore.getInstance("PKCS12");
pkcs12.load(null, null);
pkcs12.setCertificateEntry("root", root);
try (OutputStream os = Files.newOutputStream(keystore, StandardOpenOption.CREATE_NEW)) {
pkcs12.store(os, password);
}
}
private static final byte[] HEADER = "-----".getBytes(StandardCharsets.US_ASCII);
static void createIdentityStore(Path certificate, Path key, Path keystore, char[] password)
throws IOException, GeneralSecurityException {
byte[] pkcs8 = decode(Files.readAllBytes(key));
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey pvt = kf.generatePrivate(new PKCS8EncodedKeySpec(pkcs8));
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate pub;
try (InputStream is = Files.newInputStream(certificate)) {
pub = cf.generateCertificate(is);
}
KeyStore pkcs12 = KeyStore.getInstance("PKCS12");
pkcs12.load(null, null);
pkcs12.setKeyEntry("identity", pvt, password, new Certificate[] { pub });
try (OutputStream s = Files.newOutputStream(keystore, StandardOpenOption.CREATE_NEW)) {
pkcs12.store(s, password);
}
}
private static byte[] decode(byte[] raw) {
if (!Arrays.equals(Arrays.copyOfRange(raw, 0, HEADER.length), HEADER)) return raw;
CharBuffer pem = StandardCharsets.US_ASCII.decode(ByteBuffer.wrap(raw));
String[] lines = Pattern.compile("\\R").split(pem);
String[] body = Arrays.copyOfRange(lines, 1, lines.length - 1);
return Base64.getDecoder().decode(String.join("", body));
}
我想用Java创建一个密钥库文件(.jks)和一个自签名证书(.cer/.crt)。我正在用: 生成密钥存储: 关于我可能会出错的地方有什么建议吗?
然后,为了生成CA要求的,我执行了以下操作: CA使用我存储在名为的文件中的证书进行响应 现在我想将必要的组件(私钥、公钥(?)和证书)捆绑到单个中。为此,我运行了以下操作: 但我收到以下错误消息: 我怎样才能完成这件事呢?
我试图签署一个Android应用程序,但显然原始的keystore文件是不可用的。我所得到的只有以下几点: 私钥md5 0123456789abcdef0123456789abcdef<--虚构值,但 证书md5 fedcba9876543210fedcba9876543210<-原始为32个十六进制数字 已签署的生产Android应用程序 是否有任何方法可以从这些资产中重新创建一个keystor
我已经生成了RSA PRIVATE KEY。密钥和证书签名请求。CSR 然后我将这些文件加载到CA中,得到. CRT(DER)文件和Root_CA.CRT(PEM)文件 然后我转换。CRT(DER)使用RSA PRIVATE KEY。钥匙到。CRT(PEM) 我使用RSA PRIVATE KEY从. CRT(PEM)生成. pfx(PKCS#12)。钥匙 现在我丢失了RSA私钥。密钥和证书签名请求
我正在尝试创建一个。p12不包含有效标识(公钥/私钥对)的文件,用于测试我的应用程序的证书导入功能。是否可以使用openssl工具执行此操作? 我已经试过了 但我有一个错误: 如果无法使用openssl进行此操作,是否可以使用其他工具?
谁能告诉我从.p12文件中提取/转换证书.crt文件的正确方法/命令吗?在我搜查之后。我找到了将.pem转换为.crt的方法。但未找到.p12到.crt。