我想用Java创建一个密钥库文件(.jks)和一个自签名证书(.cer/.crt)。我正在用:
生成密钥存储:
protected void getKeyStore(X509Certificate certificate)
{
File newSnKeyStoreFile = new File("Mypath..\\keyStore.jks");
try {
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null, null);
if(!certificate.toString().isEmpty())
{
keyStore.store(new FileOutputStream(newSnKeyStoreFile), "password".toCharArray());
if (keyStore.getCertificateAlias(certificate) == null) {
keyStore.setCertificateEntry("cert"+ count++, certificate);
}
}
keyStore.store(new FileOutputStream(newSnKeyStoreFile), KEYSTORE_PASSWORD.toCharArray());
// Write to .jks file
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(newSnKeyStoreFile));
out.write(keyStore.toString());
} catch ( Exception e ) {
e.printStackTrace();
} finally {
if ( out != null ) out.close();
}
}catch(Exception ke){
System.out.print("Error occurred while setting up keyStore: " + ke.getMessage());
}
}
protected X509Certificate genCertificate()
{
try {
//Generate self signed certificate
CertAndKeyGen gen = new CertAndKeyGen("RSA", "SHA1WithRSA")
gen.generate(1024);
X509Certificate cert = gen.getSelfCertificate(new X500Name("CN=ROOT"), (long) 365 * 24 * 3600);
File certFile = new File("Mypath..\\Cert.cer");
// Write to .cer file
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(certFile));
out.write(certificate.getEncoded().toString());
} catch ( Exception e ) {
e.printStackTrace();
} finally {
if ( out != null ) out.close();
}
return cert;
}catch (Exception e) {
System.out.println("Error : " + e.getMessage());
}
return null;
}
keytool error: java.io.IOException: Invalid keystore format
keytool error: java.lang.Exception: Empty input
java.lang.Exception: Empty input
at sun.security.tools.KeyTool.printCertFromStream(KeyTool.java:2234)
at sun.security.tools.KeyTool.doPrintCert(KeyTool.java:2423)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:1069)
at sun.security.tools.KeyTool.run(KeyTool.java:340)
at sun.security.tools.KeyTool.main(KeyTool.java:333)
关于我可能会出错的地方有什么建议吗?
protected void getKeyStore(X509Certificate certificate)
{
File newSnKeyStoreFile = new File("Mypath..\\keyStore.jks");
try {
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null, null);
if(!certificate.toString().isEmpty())
这个测试毫无意义。如果您有一个证书,它的字符串表示形式将不会为空。如果没有,则根本不应该调用此方法。移除。
{
keyStore.store(new FileOutputStream(newSnKeyStoreFile), "password".toCharArray());
为什么?里面还什么都没有。移除。
if (keyStore.getCertificateAlias(certificate) == null) {
keyStore.setCertificateEntry("cert"+ count++, certificate);
如果它不是null,则应该覆盖该条目或者抛出异常,而不是静静地忽略该条件。
}
}
keyStore.store(new FileOutputStream(newSnKeyStoreFile), KEYSTORE_PASSWORD.toCharArray());
// Write to .jks file
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(newSnKeyStoreFile));
out.write(keyStore.toString());
} catch ( Exception e ) {
e.printStackTrace();
} finally {
if ( out != null ) out.close();
}
File certFile = new File("Mypath..\\Cert.cer");
// Write to .cer file
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(certFile));
out.write(certificate.getEncoded().toString());
out.write(certificate.getEncoded());
你似乎有把东西转换成字符串的狂热。尽量变细。
我只使用自签名证书进行测试。 问题: Q1.我想知道为什么我需要在步骤6中将服务器和客户端自己的证书添加到各自的信任库中。 2.创建x509证书 openssl req-x509-new-nodes-key diagserverca.key-sha256-days 1024-out diagserverca.pem 3.从私钥和公共证书创建PKCS12密钥存储库。 keytool-importke
我试图签署一个Android应用程序,但显然原始的keystore文件是不可用的。我所得到的只有以下几点: 私钥md5 0123456789abcdef0123456789abcdef<--虚构值,但 证书md5 fedcba9876543210fedcba9876543210<-原始为32个十六进制数字 已签署的生产Android应用程序 是否有任何方法可以从这些资产中重新创建一个keystor
我是新来配置Jetty服务器的SSL。我按照digcert的步骤创建了私钥文件、证书请求CSR文件。 我向CA发送了证书请求,并拿回了我签名的CSR。但是CA给我发了一个有两个证书的捆绑包,一个是我的证书,由CA签名,第二个是CA证书。(1star_xyx_abc_comcrt文件,2.CRT文件)。现在我面临着从这些文件创建密钥库的麻烦。 当我按照Oracle文档的步骤4、5和6使用keytoo
看看PayPal(https://www.PayPal.com/)的安全证书。它说:连接加密:高级加密(TLS_RSA_WITH_AES_256_CBC_SHA,256位密钥)。 现在,我如何创建自己签名的证书,使其具有相同的加密,AES256? 我在OpenSSL中尝试了以下代码: 最后我得到了128位证书。然后我试着: 即使我指定了'-aes256',我最终还是得到了128位证书:连接加密:高
问题内容: 在Java Web服务客户端的开发过程中,我遇到了一个问题。Web服务的身份验证使用客户端证书,用户名和密码。我从Web服务背后的公司那里收到的客户证书采用格式。当我使用文本编辑器检查文件时,它具有以下内容: 我可以在Internet Explorer中将该文件作为证书导入(无需输入密码!),并使用它通过Web服务进行身份验证。 通过首先剥离第一行和最后一行,转换为换行符并运行base
问题内容: 我的Java程序如何知道包含证书的密钥库在哪里?或者,如何告诉我的Java程序在哪里寻找密钥库? 在以某种方式指定了密钥库之后,如何指定用于对服务器进行身份验证的证书? 问题答案: