2011-07-15 2 views
4

私はこの問題で数時間ウェブを検索しましたが、私が見つけた答えはどれも自分の問題にはまったく適合しませんでしたので、 SOFでこれまでに疑問を呈した。HtmlUnitライブラリでSSLウェブブラウザ接続を開ける

私は、htmlunitライブラリを使用してJavaプログラムからWebブラウザを開こうとしています。接続が必要なウェブサイトにはSSL接続が必要で、証明書はUSBキーに保存されています。そのiKey2023製品。

システムは動作していましたが(書きませんでしたが)、USBキーの証明書の1つが期限切れになったため、自動的に次の証明書に移動しました(合計4つの証明書がありました)。ワーキング。

これは私にjavax.net.ssl.SSLPeerUnverifiedExceptionを与えています:ピアが認証されていないというエラーです。

私は帰宅していますが、方法の正確な名前は忘れましたが、次のことを覚えています。

  1. ブラウザインスタンスが呼ばれたIE8

  2. browser.setWebConnectionメソッドを使用して、作成されます。このメソッドは、APIによれば、内部APIです。

  3. は、それは、ステップ3

    でいくつかの詳細を例外を投げパラメータ

としてURLを渡すことで、Webサイトへの接続を行います。細かいことは間違っているかもしれませんが、私は大きな絵を描くのが大変です。 手順2では、このメソッドはWebConnectionオブジェクトをパラメータとして要求し、そのインタフェースの実装が存在します。この実装では、sun.security.pkcs11.SunPKCS11(configFileInputStream)を使用してキーストアが作成されます(正しく入力しましたか?)

これはsthです。

プロバイダp =新しいsun.security.pkcs11.SunPKCS11(configFileInputStream); Security.addProvider(p);

このプロバイダからキーストアを作成します。

このキーストアを使用して、WebConnection実装内でSSLSocketを作成します。

証明書が新しい証明書に切り替えられた後、証明書が正しく取得されません。

ここで私が試したことがあります。

  1. 私は、htmlunitライブラリ内のさまざまな方法を使用するsetSecurityProviderのようなものを試してみた、と私は上記のコードで作成されたProviderオブジェクトを入れてみました。クラスキャスト例外がある。

  2. システムプロパティ(trustStore、trustStorePassword、keyStoreなど)を手動で設定しようとしました。これを行うために、USBキーから証明書をエクスポートしたいのですが、プライベートキーをエクスポートすることはできませんでした。そのため、有効なPKCS12ファイルを実際に作成することはできませんでした(openSSLは、キーファイルと変換のための.pemファイルがあり、そのキーファイルはありませんでした)。

これらは機能しませんでした。今はとても固執しています。どんな助け/ヒントも非常に高く評価されるでしょう。詳細が必要な場合は、明日に提供することができますが、ここで十分な詳細を述べたと思います。

ありがとうございます。

答えて

5

私も同様の問題があります。私の場合、管理者は証明書を変更して、同じSSLPeerUnverifiedExceptionが発生し始めました。

私はinsecureSSL(getPage()を呼び出す前に)を使用するようにWebClientを設定でき、私はもはや例外を取得しません。

webClient.setUseInsecureSSL(true); 

しかし、これはサーバーが基本的にクライアントを認証しないため、問題は解決しません。

WebClientが新しい証明書で動作しないものを格納しているかのようになります。

+4

@ 2.11で廃止されました。代わりにsetUseInsecureSSLを使用してください。 – alfonx

関連する問題