証明書の有効期限が 2013 年 4 月に設定されていて、GlobalSign をルート証明書として使用しているサーバーに HTTPS 接続しようとしています。
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();
現状では、これは呼び出された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
次に、これがロードされ、次を使用してアプリケーションで使用されます。
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");
ks.load(stream, "www.onlinescoutmanager.co.uk".toCharArray());
stream.close();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
SSLContext context2 = SSLContext.getInstance("TLS");
context2.init(null, new TrustManager[] { defaultTrustManager }, null);
sslSocketFactory = context2.getSocketFactory();
これは呼び出されjava.io.IOException: Wrong version of key store.
たときに失敗しています。keystore.Load()
私は合格していることを確認し-storetype BKS
、<=7 文字のキーストア パスワードを使用し、CA 証明書をキー ストアに追加し、Bouncy Castle バージョン 1.45 と 1.47 の両方を使用して、報告されたエラー メッセージを変更せずにキー ストアを作成しました。
私の環境は、Windows 8 で実行されている JRE 1.7u9b5 を備えた Eclipse Juno 4.2.1 です。私がテストしているデバイスは、ストック Android 2.3 を実行している HTC センセーションです。アプリケーションの SDK の最小バージョンは 7 で、ターゲットは 15 です。
Windows 8 で有効な BKS キー ストアを作成する方法、または Java でブラウザ (またはシステム?) と同じキー ストアを使用する方法を説明できる人がいれば、それを歓迎します。
執筆時点のプロジェクト全体と、必要に応じて生成されたキーストアをダウンロードできます。