我有一个java属性对象,其中包含Web服务的身份验证信息.我需要加密这些数据,但我不知道在哪里需要存储加密密钥才能保持安全.
有关加密此数据并以安全方式检索数据的最佳做法是什么?
使用密钥库有什么好处吗?
ws_user=username
ws_password=password
ws_url=https://www.whatever.com/myservice
Run Code Online (Sandbox Code Playgroud) 我的java应用程序使用密钥库文件,其中我有一个证书,用于与活动目录服务器的ssl连接.我要做的是检查其到期日期并提示用户是否即将到期.我的申请开始时我必须这样做.我的想法是使用外部程序:keytool在密钥库中显示有关某些证书的信息,然后对keytool输出的字符串进行一些解析操作以查找此验证日期.
这是特定keytool命令的输出:
Owner:
Issuer: CN=CPD Root CA, DC=cpd, DC=local<br>
Serial number: 39e8d1610002000000cb
<br>Valid from: Wed Feb 22 21:36:31 CET 2012 until: Thu Feb 21 21:36:31 CET 2013
Certificate fingerprints: <br>
MD5: 82:46:8B:DB:BC:5C:64:21:84:BB:68:E3:4B:D4:35:70<br>
SHA1: 35:52:CA:F2:11:66:1E:50:63:BC:53:A5:50:C1:F0:1E:62:81:BC:3F<br>
Signature algorithm name: SHA1withRSA
Run Code Online (Sandbox Code Playgroud)
问题在于解析日期,因为我无法确定它的显示格式.
有没有更简单的方法来检查java密钥库文件中包含的证书的到期日期?
我忘记了Android密钥库的密码,但它保存在Intellij IDEA密码管理器中.我知道主密码,因此IDEA能够自动完成密钥库密码,但我找不到从文本字段查看或复制/粘贴密码的方法.
是否有插件可以做到这一点,也许?
我还试图寻找一些日志或shell,因为我认为幕后IDEA正在使用keytoolSDK中的实用程序,所以也许我可以在命令行中找到密码.
我已经没想完了.请帮忙.
编辑:如果有人知道加密密码的保存位置,我可以备份该文件,并在将来使用相同主密码的IDEA安装中使用它.那会有用吗?
我是Android的编程新手,我只是尝试运行我的构建并获得此消息
Execution failed for task ':app:validateDebugSigning'.
> Unable to recreate missing debug keystore.
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我正在使用Android Studio.
我对这个主题进行了研究,但找不到解决方案:
我从eclipse项目创建了一个签名的apk,我也有eclipse密钥库.但是我无法在登录Android Studio时找到如何导入这个密钥库.这些是我已经尝试过的以下内容:
- 添加最初由Android Studio中的eclipse创建的密钥库路径
在将.jks扩展名添加到原始文件后添加Android Studio中的路径
在这两种情况下,错误是:
任务':application:packageRelease'的执行失败.
无法从密钥库中读取密钥
那么将eclipse密钥库添加到Android Studio的正确方法是什么?
任何建议都表示赞赏,因为我不知道出了什么问题.
我有一个应用程序,提供安装CA证书的选项,它存储在可信凭据的用户选项卡中,它按预期工作.
仅供参考 (这是我安装证书的方式):
Intent installIntent = KeyChain.createInstallIntent();
javax.security.cert.X509Certificate x509 = javax.security.cert.X509Certificate.getInstance(caRootCertBytes);
installIntent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded());
installIntent.putExtra(KeyChain.EXTRA_NAME,caRootCertName);
startActivity(installIntent);
Run Code Online (Sandbox Code Playgroud)
如果卸载了应用程序,则证书仍保留在受信任的凭据中.
我希望在卸载应用程序时卸载证书.
我想过使用deleteEntry方法删除证书KeyStore.
仅供参考 (我没有测试过.希望它能够正常工作......我测试后会更新)
javax.security.cert.X509Certificate x509 = javax.security.cert.X509Certificate.getInstance(caRootCertBytes);
KeyStore ks = KeyStore.getInstance("AndroidCAStore")
if (ks != null)
{
ks.load(null, null);
Enumeration<String> aliases = ks.aliases();
while (aliases.hasMoreElements())
{
String alias = (String) aliases.nextElement();
java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias);
String name = x509.getIssuerDN().getName();
if (cert.getIssuerDN().getName().contains(name))
{
ks. deleteEntry(alias)
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使你考虑上面的代码工作AFAIK我无法注册广播接收器卸载我自己的应用程序.
在卸载我的应用程序时,如何删除我的应用程序安装的证书?
任何帮助表示赞赏!
我正在阅读.NET中的密钥容器,作为存储非密钥加密和数字签名私钥的安全场所.
我的问题是密钥容器的安全性如何?因为我发现如果我知道密钥容器名称,那么我将能够使用以下内容检索私钥:
// Create the CspParameters object and set the key container
// name used to store the RSA key pair.
CspParameters cp = new CspParameters();
cp.KeyContainerName = ContainerName;
// Create a new instance of RSACryptoServiceProvider that accesses
// the key container MyKeyContainerName.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
// Display the key information to the console.
Console.WriteLine("Key retrieved from container : \n {0}", rsa.ToXmlString(true));
Run Code Online (Sandbox Code Playgroud)
密钥容器是否是存储私钥的安全位置?
我刚刚为我的Android应用程序创建了一个密钥库,但我记不清我设置有效期的时间.
有没有办法找出密钥库有多长时间?
我正在尝试使用以下命令在macos sierra上找到我的签名密钥库的SHA1哈希:
keytool -exportcert -alias androiddebugkey -keystore $HOME/.android/debug.keystore -list -v -storepass android
Run Code Online (Sandbox Code Playgroud)
结果如下所示:
别名:androiddebugkey
创建日期:2017年10月25日
输入类型:PrivateKeyEntry
证书链长度:1
证书[1]:
keytool错误:java.util.IllegalFormatConversionException:d!= java.lang.String java.util. IllegalFormatConversionException:d!= Java.lang.String at java.base/java.util.Formatter $ FormatSpecifier.failConversion(Formatter.java:4331)at java.base/java.util.Formatter $ FormatSpecifier.printInteger(Formatter.java: 2846)at java.base/java.util.Formatter $ FormatSpecifier.print(Formatter.java:2800)at java.base/java.util.Formatter.format(Formatter.java:2581)at java.base/java.util .Formatter.format(Formatter.java:2517)位于java.base/java.lang.String.format(String.java:2747)java.base/sun.security.tools.keytool.Main.withWeak(Main.java) :3151)在java.base/sun.security.tools.keytool.Main.printX509Cert(Main.java:3182)的java.base/sun.security.tools.keytool.Main.doPrintEntry(Main.java:1995)at at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:1212)在java.base/sun.security.tools.keytool.Main.run(Main.java:397)java.base/sun.security.tools.keytool.Main.main(Main.java:390)
据我所知,该命令正在运行,它不是文件的问题,也不是密码,在我看来java中的一个内部错误,它是否缺少一些java包?我正在使用Java SDK 9.0.1
keystore ×10
android ×7
java ×4
certificate ×2
eclipse ×2
.net ×1
cryptography ×1
debugging ×1
encryption ×1
google-play ×1
keytool ×1
migration ×1
passwords ×1
recreate ×1
ssl ×1
uninstall ×1