我有JAVA_HOME=C:\Users\myuser\jdk1.8.0_65
Eclipse中的JRE Sytem库指向C:\Users\myuser\jdk1.8.0_65
java -version
提供C:\Users\myuser\jdk1.8.0_65
通过以下方式导入证书:
C:\ Users \ myuser \ jdk1.8.0_65 \ bin \ keytool.exe -importcert -trustcacerts -keystore C:\ Users \ myuser \ jdk1.8.0_65 \ jre \ lib \ security \ cacerts -storepass changeit -noprompt -alias ldap -file C:\ Users \ myuser \ certificates \ ldap_cer.cer
Keytool列表给出:
C:\Users\myuser>keytool -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 0 entries
当我尝试使用以下程序检查证书时,我可以看到该条目,为什么keytool -list
没有给我相同的结果?我该如何添加证书?我缺少什么?
package com.;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.Certificate;
import java.util.Enumeration;
public class HandShake {
static FileInputStream is;
public static void main(String[] args) {
try {
File file = new File("C://Users//myuser//jdk1.8.0_65//jre//lib//security//cacerts");
System.setProperty("javax.net.ssl.keyStore", file.getAbsolutePath());
System.out.println(System.getProperty("javax.net.ssl.keyStore"
));
is= new FileInputStream(file);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
String password = "changeit";
keystore.load(is, password.toCharArray());
Enumeration enumeration = keystore.aliases();
while(enumeration.hasMoreElements()) {
String alias = (String)enumeration.nextElement();
if(alias.equals("ldap")){
System.out.println("alias name: " + alias);
Certificate certificate = keystore.getCertificate(alias);
System.out.println(certificate.toString());
}
}
} catch (java.security.cert.CertificateException e4) {
e4.printStackTrace();
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (FileNotFoundException e2) {
e2.printStackTrace();
} catch (KeyStoreException e3) {
e3.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(null != is)
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
答案 0 :(得分:0)
您可能正在尝试在另一个密钥库上运行keystore -list
尝试
keytool -list -keystore C:\Users\myuser\jdk1.8.0_65\jre\lib\security\cacerts
<强> EDITED 强>
通过系统属性在JVM级别设置SSL属性。这意味着您可以在运行程序时设置它们(java -D ....)或者您可以通过执行System.setProperty在代码中设置它们。
您必须设置的具体键如下:
javax.net.ssl.keyStore-包含的Java密钥库文件的位置 申请流程自己的证书和私钥。在Windows上, 指定的路径名必须使用正斜杠/,代替 反斜杠。
javax.net.ssl.keyStorePassword - 访问私钥的密码 来自javax.net.ssl.keyStore指定的密钥库文件。这个 密码使用两次:解锁密钥库文件(商店密码), 并解密存储在密钥库中的私钥(密钥密码)。
javax.net.ssl.trustStore - Java密钥库文件的位置 包含由此信任的CA证书集合 申请流程(信托商店)。在Windows上,指定的路径名 必须使用正斜杠,/,代替反斜杠,。
如果未使用此属性指定信任库位置,则 SunJSSE实现在中搜索并使用密钥库文件 以下位置(按顺序):
$ JAVA_HOME / lib / security / jssecacerts $ JAVA_HOME / lib / security / cacerts javax.net.ssl.trustStorePassword - 解锁密钥库的密码 由javax.net.ssl.trustStore指定的文件(商店密码)。
javax.net.ssl.trustStoreType - (可选)对于Java密钥库文件 格式,此属性的值为jks(或JKS)。你通常不会 指定此属性,因为其默认值已经是jks。
javax.net.debug - 要打开SSL / TLS图层的日志记录,请设置此项 属于ssl。