我希望能够在Java应用程序中以编程方式访问所有受信任的根证书.
我正在查看密钥库接口,但我希望得到JRE隐含的可信根列表.
这可以随处访问吗?
我想发一个https请求.
我使用bouncycastle来生成这样的密钥库:
keytool -importcert -trustcacerts -alias ludevCA -file lu_dev_cert.crt -keypass mypass -keystore keystore.bks -storepass mypass -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk15on-146.jar
Run Code Online (Sandbox Code Playgroud)
并且keylist命令返回正确的值.
但当我这样做时:
KeyStore ks = KeyStore.getInstance("BKS");
InputStream in = getResources().openRawResource(R.raw.keystore);
ks.load(in, "mypass".toCharArray());
Run Code Online (Sandbox Code Playgroud)
我有一个错误:
wrong version of keystore
Run Code Online (Sandbox Code Playgroud)
我尝试使用多个版本的bouncycast,但结果是一样的.我也尝试定义keysize 1024,但没有任何改变.
有任何想法吗 ?
在Android Studio中,我使用密钥库生成了已签名的APK,依此类推.将APK安装到设备上时失败并显示"无法安装应用程序",而在Android监视器中,我看到以下行:
Package com.my.app has no certificates at entry AndroidManifest.xml; ignoring!
Run Code Online (Sandbox Code Playgroud)
有人知道什么是错的吗?
我们可以在密钥库中加载多个证书和密钥吗?
是否始终只需要加载对(即证书和密钥)?
如果密钥库具有多个证书和密钥,当Java SSL尝试将连接建立为服务器时,将选择哪个证书和密钥?
我有证书链的文件 - certificate.cer:
subject=/C...
issuer=/C=US/O=VeriSign, Inc...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
subject=/C=US/O=VeriSign, Inc...
issuer=/C=US/O=VeriSign, Inc...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
subject=/C=US/O=VeriSign, Inc...
issuer=/C=US/O=VeriSign, Inc...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
我需要将这个证书链添加到密钥库.
我所做的:
openssl x509 -outform der -in certificate.cer -out cert.der
keytool -v -importcert -alias mykey -file cert.der -keypass <passwd> -keystore keystore -storepass <passwd> -alias <myalias>
Run Code Online (Sandbox Code Playgroud)
结果我在密钥库中只有1个证书.
但应该有3.
什么可能是错的?
解决方案:
CA向我发送了PKCS#7格式的证书.
我将它们存储在certificate.p7b文件中,然后通过以下命令成功将它们添加到密钥库:
keytool -import -trustcacerts -file certificate.p7b -keystore keystore -storepass <mypasswd> -alias "myalias"
Run Code Online (Sandbox Code Playgroud) 我想知道如何在Android中安全地存储加密密钥?保护加密和密钥的最佳方案是什么?
我刚刚创建了一个带有java keytool的信任库(用于没有CA证书的服务器的服务器身份验证).但是我只是注意到一些奇怪的事 我这样开始我的客户:
java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client
Run Code Online (Sandbox Code Playgroud)
(注意:没有指定密码)
以上呼叫有效.
但是,当我尝试这个:
java -classpath <STUFF> Client
Run Code Online (Sandbox Code Playgroud)
这是行不通的.(显然它不起作用,它需要信任库).
我本以期需要传递这个选项(但我没有):
-Djavax.net.ssl.trustStorePassword=mypass
Run Code Online (Sandbox Code Playgroud)
问题:您是否需要密码才能访问信任库?密码只是用于修改吗?密钥库怎么样?
如果我在Android P上运行此代码,我会收到以下异常:
private static KeyStore.PrivateKeyEntry getPrivateKeyEntry(String alias) {
try {
KeyStore ks = KeyStore
.getInstance(SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
ks.load(null);
KeyStore.Entry entry = ks.getEntry(alias, null);
if (entry == null) {
Log.w(TAG, "No key found under alias: " + alias);
Log.w(TAG, "Exiting signData()...");
return null;
}
if (!(entry instanceof KeyStore.PrivateKeyEntry)) {
Log.w(TAG, "Not an instance of a PrivateKeyEntry");
Log.w(TAG, "Exiting signData()...");
return null;
}
return (KeyStore.PrivateKeyEntry) entry;
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
例外:
在android.os.Parcel.readException的android.os.Parcel.readException(Parcel.java:1910)的android.os.Parcel.createException(Parcel.java:1956)上的KeyStore异常android.os.ServiceSpecificException :(代码7) (Parcel.java:1860)位于android.security.keynd.KandStoreStoreSpi的android.security.IKeystoreService $ Stub …
什么是用于管理Java密钥库和安全证书的有竞争力的免费工具?
谢谢.
我收到了这个错误.
C:\Program Files\Java\jre7\bin>keytool -list -v -keystore "C:\Users\Suresh\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
keytool error: java.lang.Exception: Keystore file does not exist: C:\Users\Suresh\.android\debug.keystore
java.lang.Exception: Keystore file does not exist: C:\Users\Suresh\.android\debug.keystore
at sun.security.tools.KeyTool.doCommands(Unknown Source)
at sun.security.tools.KeyTool.run(Unknown Source)
at sun.security.tools.KeyTool.main(Unknown Source)
C:\Program Files\Java\jre7\bin>
Run Code Online (Sandbox Code Playgroud)

keystore ×10
java ×9
android ×5
certificate ×5
keytool ×2
security ×2
bouncycastle ×1
encryption ×1
install ×1
openssl ×1
ssl ×1
truststore ×1