相关疑难解决方法(0)

android调用上的密钥库错误版本

我想发一个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,但没有任何改变.

有任何想法吗 ?

java android bouncycastle certificate keystore

32
推荐指数
4
解决办法
2万
查看次数

使用URL.openConnection()建立HTTPS连接

我正在尝试与证书设置为2013年4月到期的服务器建立HTTPS连接,并使用GlobalSign作为根证书.

HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
// urlConnection.setSSLSocketFactory(sslSocketFactory);
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);

// Send the POST data
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
out.write(postParamString.toString().getBytes("UTF8"));

// Read the reply
InputStream in = urlConnection.getInputStream();
Run Code Online (Sandbox Code Playgroud)

就目前而言,这会javax.net.ssl.SSLHandshakeException: org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate signature.getOutputStream()被召唤时抛出.

此相同的站点和证书在HTC Web浏览器和桌面浏览器中有效.当我使用相同的代码访问Google时,它可以工作(但随后会抱怨404错误).StackOverflow上的各种帖子暗示它应该"正常工作"而其他人说要设置自己的密钥库(或禁用所有HTTPS验证!)我假设行为的差异归结为使用中的不同根密钥库(任何人都可以澄清这一点?).

我现在尝试使用充气城堡创建一个密钥库,但我无法将其加载到我的设备上.

从Firefox导出证书后,我使用以下方法创建密钥库:

keytool.exe -import -alias onlinescoutmanager -file www.onlinescoutmanager.co.uk.crt -storetype BKS -keystore res\raw\keystore
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令加载并在应用程序中使用:

InputStream stream = context.getResources().openRawResource(R.raw.keystore);
// BKS seems to be the default but we want to be explicit
KeyStore ks = KeyStore.getInstance("BKS"); …
Run Code Online (Sandbox Code Playgroud)

java https android bouncycastle keystore

14
推荐指数
1
解决办法
1万
查看次数

"错误的密钥库版本"错误.如何创建version = 1密钥库证书?

我在使用SSL时遇到问题,因为我收到了与我的密钥库相关的以下错误(使用keytool自行创建和自签名:http://developer.android.com/tools/publishing/app-signing.html) :

08-14 20:55:23.044:W/System.err(5430):java.io.IOException:密钥库的错误版本.08-14 20:55:23.060:W/System.err(5430):at org.bouncycastle.jce.provider.JDKKeyStore.engineLoad(JDKKeyStore.java:812)...

JDKKeyStore.java类中引发的错误出现在以下代码中:

来自JDKKeyStore.java的Blockquote:
if(version!= STORE_VERSION){if(version!= 0){throw new IOException("key store的错误版本."); }}

大段引用

在这种情况下,STORE_VERSION = 1,我的版本= 3基于读取我创建的密钥库所持有的证书的详细信息.我不知道如何生成包含version = 1证书的密钥库.

我发现这个答案很有帮助: 在进行https调用时错误的版本密钥库

但是它要求使用以下参数创建密钥库:

-storetype BKS
-provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath
/path/to/bouncycastle.jar

但是,当我尝试使用以下参数创建keytool(使用Mac上的终端应用程序)时:

keytool -genkeypair -v -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 -keypass android -keystore /Users/djames/dropbox/bc146keystore/debug.keystore -storepass android -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /用户/ djames /保管箱/ bc146keystore /

(其中/ Users/djames/dropbox/bc146keystore /是充气城堡罐子的路径:bcprov-jdk16-146.jar)

我收到以下错误:

keytool错误:java.lang.RuntimeException:用法错误,?providerpath不是合法命令java.lang.RuntimeException:用法错误,?providerpath不是sun.security.tools.KeyTool.parseArgs的合法命令(KeyTool.java: 375)sun.security.tools.KeyTool.run(KeyTool.java:171)at sun.security.tools.KeyTool.main(KeyTool.java:166)

我不明白这告诉我的是什么.如果我使用:keytool -help它告诉我以下是-genkeypair选项的有效选项:

-genkeypair [-v] [-protected] [-alias] [-keyalg] [-keysize] [-sigalg] [-dname] [-validity] …

ssl android keytool android-keystore

7
推荐指数
2
解决办法
1万
查看次数