我正在尝试通过 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 地址,我该如何解决?
谢谢
我目前正在使用Java中的密钥处理类,特别是使用KeyStore.我正在尝试使用AES实例生成SecretKey,然后使用setEntry()方法将其放在KeyStore中.
我已经包含了我的代码的相关部分:
// The KS Object
private KeyStore keyStore;
private KeyStore.SecretKeyEntry secretKeyEntry;
private KeyStore.ProtectionParameter protectionParameter;
private KeyGenerator keyGenerator;
private SecretKey secretKey, newSecretKey;
keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(256);
newSecretKey = keyGenerator.generateKey();
protectionParameter = new KeyStore.PasswordProtection(KEYSTORE_PASSWORD.toCharArray());
secretKeyEntry = new KeyStore.SecretKeyEntry(newSecretKey);
keyStore.setEntry(KEYSTORE_ALIAS, secretKeyEntry, protectionParameter);
Run Code Online (Sandbox Code Playgroud)
我使用的两个常量也定义为字符串.
我一直得到的异常是在我的setEntry()调用中:
java.security.KeyStoreException: Cannot store non-PrivateKeys
at sun.security.provider.JavaKeyStore.engineSetKeyEntry(Unknown Source)
at sun.security.provider.JavaKeyStore$JKS.engineSetKeyEntry(Unknown Source)
at java.security.KeyStoreSpi.engineSetEntry(Unknown Source)
at java.security.KeyStore.setEntry(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我主要使用此文档http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html作为参考,以及其他一些来源.
在此先感谢您的帮助.
我已经陷入了一个有点烦人的Android密钥库文件的情况.目前我有几个不同的应用程序,每个应用程序使用不同的密钥库文件签名 有点像:
每个密钥库为每个应用程序包含不同的名称和别名.
我现在正在学习这样做有点傻,而且对我的所有应用程序使用单个密钥库文件会更好.我即将发布一个新的应用程序,所以这次我试图让它正确.
我的一般问题是,我怎样才能让将来的生活更轻松?
我已经读过,我可以重命名其中一个密钥库并更改别名,所以理论上,我可以使用现有的密钥库之一签署我的下一个应用程序?这意味着我的应用程序中至少有两个使用相同的密钥库,它将具有合理的名称.
编辑:作为参考,这是我今天阅读的教程之一:
http://blog.blundell-apps.com/tut-change-alias-passwords-of-your-android-keystore/
而且这个其他堆栈溢出答案: 我可以更改密钥的别名吗?
根据教程我的理解是,我可以安全地重命名密钥库文件,更改密码并重命名别名,而不会失去更新现有应用程序的能力.任何人都可以确认这是真的,还是有某种方式我可以证明它?
最后,我有一个第三个密钥库我想合并到另一个密码库中,如果可能的话?理想情况下,我想最终只为所有3个应用程序提供一个密钥库.我知道这可能会推动它,但无论如何我都会问.
显然,我不想失去更新现有应用程序的能力.
我打算KeyStore在我的Android应用程序中使用KeyPair存储在其中的AES密钥来加密AES密钥KeyStore.KeyStore的Android文档:
https://developer.android.com/training/articles/keystore.html
在搜索互联网后,我找到了一个AOSP示例,我编辑了这个:
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" …Run Code Online (Sandbox Code Playgroud) 我在JBoss Wildfly 8.1中配置了SSL.我已生成密钥库文件并更新了standaolne.xml文件,如下所示
<security-realm name="security-realm">
<server-identities>
<ssl>
<keystore path="security/keystore.jks" relative-to="jboss.server.config.dir" keystore-password="changeit" key-password=" changeit"/>
</ssl>
</server-identities>
</security-realm>
Run Code Online (Sandbox Code Playgroud)
密钥库密码和密钥密码以明文形式显示.我们无法以明文形式显示它.我想加密密码.我尝试了很多,但在这方面无法提供可靠的帮助.所以任何机构都可以帮助我如何加密这个密码以及如何在sandalone.xml文件中使用它.
我必须通过SSL双重身份验证连接到服务器.我已将自己的私钥加证书添加到keystore.jks,并将服务器的自签名证书添加到truststore.jks,这两个文件都复制到/ usr/share/tomcat7.我的代码使用的套接字工厂由以下提供者提供:
@Singleton
public static class SecureSSLSocketFactoryProvider implements Provider<SSLSocketFactory> {
private SSLSocketFactory sslSocketFactory;
public SecureSSLSocketFactoryProvider() throws RuntimeException {
try {
final KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
final InputStream trustStoreFile = new FileInputStream("/usr/share/tomcat7/truststore.jks");
trustStore.load(trustStoreFile, "changeit".toCharArray());
final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStore);
final KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
final InputStream keyStoreFile = new FileInputStream("/usr/share/tomcat7/keystore.jks");
keyStore.load(keyStoreFile, "changeit".toCharArray());
final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, "changeit".toCharArray());
final SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
this.sslSocketFactory = sslContext.getSocketFactory();
} catch (final KeyStoreException e) { …Run Code Online (Sandbox Code Playgroud) 我有一个使用storetype JCEKS的Java密钥库文件.它包含SecretKeyEntry条目.我希望能够从命令行转储存储在此文件中的实际密钥.我试过这个:
keytool -list -keystore secretkeys.jks -storetype JCEKS
Run Code Online (Sandbox Code Playgroud)
哪个回来了
Keystore type: JCEKS
Keystore provider: SunJCE
Your keystore contains 1 entry
secret1, May 27, 2016, SecretKeyEntry
Run Code Online (Sandbox Code Playgroud)
但这并没有向我展示关键.如何从命令行中提取和查看密钥?
当我尝试在团结中构建我的apk时,我得到错误的消息:
1.
Win32Exception: ApplicationName='/Users/kristianstenberg/Library/Android/sdk/build-tools/26.0.0/apksigner', CommandLine='sign --ks "/Users/kristianstenberg/Desktop/Platformer/VegardHansenStenberg.keystore" --ks-pass pass:"Balder123" --ks-key-alias "besquare" --key-pass pass:"Balder123" "/Users/kristianstenberg/Desktop/Platformer/Temp/StagingArea/Package.apk"', CurrentDirectory='Temp/StagingArea'
System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start ()
(wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Utils/Program.cs:44)
UnityEditor.Utils.Program.Start () (at /Users/builduser/buildslave/unity/build/Editor/Mono/Utils/Program.cs:28)
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.PostProcessor.Tasks.TasksCommon.Exec (System.String command, System.String args, System.String workingdir, System.String errorMsg, Int32 retriesOnFailure)
UnityEditor.Android.PostProcessor.Tasks.BuildAPK.SignPackage (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.Tasks.BuildAPK.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, …Run Code Online (Sandbox Code Playgroud) 我想从现有的crt文件中使用Java API创建密钥存储区“ PCKS12”。可能吗?如果是,该怎么做?
编辑
1 /
openssl req -newkey rsa:2048 -nodes -keyout keyFile.key -x509 -days 3650 -out certFile.crt
2 /
openssl pkcs12 -export -in certFile.crt -inkey keyFile.key -out tmp.p12 -name别名
3 /
keytool -importkeystore -srckeystore tmp.p12 -srcstoretype PKCS12 -srcstorepass密码-destkeystore keyStoreFile.jks -deststoretype JKS -deststorepass密码-destkeypass密码-alias别名
如何以编程方式进行步骤2和3?
我知道我可以用
keytool -delete -alias alias -keystore .keystore
Run Code Online (Sandbox Code Playgroud)
从证书存储中删除一些证书。但是我有109个证书存储在cacerts中:keytool -list结果
如何用一个命令删除它们?或者换句话说,如何清除证书存储?
keystore ×10
java ×5
android ×3
keytool ×3
ssl ×3
aes ×2
apk ×1
command-line ×1
encryption ×1
jboss ×1
rsa ×1
self-signed ×1
truststore ×1
wildfly ×1