我正在尝试通过 https URL 获取图像,但遇到了一些问题。我使用 Java 的 keytool 命令生成了一个密钥库。如果我指定的通用名称 (CN) 等于我的主机名,例如 CN=JONMORRA,然后尝试通过我的主机名进行查询,例如https://JONMORRA:8443/那么它就可以正常工作。但是,如果我指定通用名称作为我的 ip 地址,例如 CN=192.168.56.1,并尝试通过我的 ip 地址进行查询,例如https://192.168.56.1:8443/然后我得到一个错误
HTTPS 主机名错误:应该是 <192.168.56.1>
这表明我的主机名是错误的,即使这是我在密钥库中指定的。
我想使用 ip 地址而不是主机名,这样我就可以在 Linux 和 Windows 机器之间进行查询,而不必担心主机名。
为什么 CN 不接受 IP 地址,我该如何解决?
谢谢
我可以使用keytool命令将Java信任库(仅包含证书,没有私钥的JKS文件)导出到p12文件:
keytool -importkeystore -srckeystore truststore.jks -destkeystore truststore.p12 -deststoretype PKCS12
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法弄清楚如何使用“ openssl pkcs12”命令创建相同的文件。它允许您传递证书,但是我尝试过的每个选项都要求用户传递私钥。
我正在尝试使用以下命令为 Android 应用生成证书:
keytool -genkey -v -keystore my_key.keystore
-alias my_alias -keyalg RSA -keysize 2048 -validity 10000
Run Code Online (Sandbox Code Playgroud)
当我完成最后一个问题时,
“它是正确的[否]:”
消息出现。如果我写 YES,keytool 会忽略我的回答并重新从头开始。
我在 Windows 7 和 jdk1.7.0_79 上。
有什么想法吗?
只是想将这个问题作为“澄清”而不是决议提出:
java keytool 有-importcert带-trustcacertsarg的命令。来自官方帮助指南。
从 CA 导入证书回复
导入对您提交证书签名请求的 CA 的公钥进行身份验证的证书后(或 cacerts 文件中已经有这样的证书),您可以导入证书回复并将您的自签名证书替换为证书链。此链是 CA 为响应您的请求而返回的链(当 CA 回复是链时),或者是使用证书回复和已在导入回复的密钥库或 cacerts 密钥库文件中的密钥库。
例如,如果您向 VeriSign 发送了证书签名请求,那么您可以使用以下内容导入回复,假设返回的证书名为 VSMarkJ.cer:
keytool -importcert -trustcacerts -file VSMarkJ.cer
我还从keytool文档中阅读了以下内容:
如果回复是单个 X.509 证书,keytool 会尝试建立信任链,从证书回复开始到自签名证书(属于根 CA)结束。证书回复和用于验证证书回复的证书层次构成了新的别名证书链。如果无法建立信任链,则不会导入证书回复。在这种情况下,keytool 不会打印出证书并提示用户验证它,因为用户很难(如果不是不可能的话)确定证书回复的真实性。
如果回复是 PKCS#7 格式的证书链,则在 keytool 尝试将回复中提供的根 CA 证书与任何密钥库或“cacerts”密钥库文件中的可信证书(如果指定了 -trustcacerts 选项)。如果找不到匹配项,则打印出根 CA 证书的信息,并提示用户对其进行验证,例如,通过将显示的证书指纹与从其他(受信任的)信息源获得的指纹进行比较,从而可能是根 CA 本身。然后用户可以选择中止导入操作。但是,如果提供了 -noprompt 选项,则不会与用户进行交互。
如果我收到带有根 CA 和我签署的证书的证书回复,哪个是我正确导入证书的正确命令(或者以下所有内容都将根据根 CA 的可用性工作):
# Assuming doesn't exist at all
keytool -import -keystore server_keystore.jks -storepass pass -alias rootCA -file ca-cert-file
keytool -import -keystore server_keystore.jks …Run Code Online (Sandbox Code Playgroud) 在我的 Android 应用程序中,我有一个名为 的密钥库文件keystore.p12,它位于/data/data/com.company.myapp/files. 我拉了这个特定的文件,现在我想检索存储在其中的密钥。
我用这样的keytool试了一下:
>keytool.exe -list -keystore C:\Users\user\Desktop\keystore.p12 -storepass letmein -storetype PKCS12 -v
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到以下错误:
keytool error: java.io.IOException: toDerInputStream rejects tag type 0
java.io.IOException: toDerInputStream rejects tag type 0
at sun.security.util.DerValue.toDerInputStream(DerValue.java:874)
at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1915)
at java.security.KeyStore.load(KeyStore.java:1445)
at sun.security.tools.keytool.Main.doCommands(Main.java:795)
at sun.security.tools.keytool.Main.run(Main.java:343)
at sun.security.tools.keytool.Main.main(Main.java:336)
Run Code Online (Sandbox Code Playgroud)
我用 Java 尝试了同样的事情,但我遇到了同样的异常:
public static void main(String[] args) {
try {
FileInputStream is = new FileInputStream("C:\\Users\\user\\Desktop\\keystore.p12");
KeyStore keystore = KeyStore.getInstance("pkcs12");
keystore.load(is, "letmein".toCharArray());
is.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
我想用证书签署我的 jar 文件。我遵循了以下步骤。C:\Program Files\Java\jdk-10.0.2\bin>keytool -genkey -alias testals -keystore testks
C:\Program Files\Java\jdk-10.0.2\bin>keytool -export -keystore testks -alias testals -file testcer.cer
证书存储在文件中
C:\Program Files\Java\jdk-10.0.2\bin>keytool -import -alias testals -file testcer.cer -keystore testks
但是在导入获取异常时,证书回复和密钥库中的证书是相同的。
请帮我怎么做?
我有一个 .p12 文件,我需要更改其密码。而这个新密码必须是“1234”
我已经尝试使用 Keytool 做到这一点:
keytool -importkeystore -srckeystore authentification.p12 -srcstoretype PKCS12 -srcstorepass "2600807934-Auth" -destkeystore new.p12 -deststoretype PKCS12 -storepass 1234
Run Code Online (Sandbox Code Playgroud)
但是我收到一条错误消息,告诉我新密码必须至少包含 6 个字符。
你没有其他方法可以做到这一点吗?(我得到了其他 .p12 文件,密码为“1234”,所以有可能)
我可以将 p12 密钥库导入到密钥库。通过 storepass,我可以预先填写目标密钥库的密码。
keytool -importkeystore -srckeystore kafka.server.keystore.p12 -srcstoretype pkcs12 -destkeystore kafka.server.keystore.jks -storepass $PWD
Run Code Online (Sandbox Code Playgroud)
但是,仍然要求我提供源密钥库密码:
Enter source keystore password:
Run Code Online (Sandbox Code Playgroud)
我该如何防止这种情况发生?
但是,终端仍然无法找到 keytool 或者命令不起作用?
我尝试在 C:\Program Files\Java\jdk15.x.x_x\bin 中使用以下命令创建 keytool:
keytool -genkey -alias demospring -keyalg RSA -keystore demospring.jks -keysize 2048
Run Code Online (Sandbox Code Playgroud)
系统要求我创建密码,但不是别名密码。我错过了什么吗?我对这个概念还很陌生。感谢您提前提供任何帮助!