9

エグゼクティブ サマリー: Java コードを使用して新しいルート証明書を Java にインストールするにはどうすればよいですか?

さまざまな Web サービスにアクセスするデスクトップ アプリケーションがあります。最近、そのうちの 1 人が SSL 証明書を Trustwave によって署名されたものに切り替えました。Trustwave SSL 証明書は通常のインターネット ブラウザで受け入れられますが、Java には前提条件となるルート証明書が付属していないようで、指定された Web サービスへのアクセスが失われ、次のエラー メッセージが表示されました。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

プロバイダーに Verisign に戻すよう説得することで一時的な猶予を得ましたが、彼らが元に戻すときは準備ができていなければなりません。そのため、必要に応じて Trustwave ルート証明書を自動的にインストールするデスクトップ ソフトウェアが必要です。私たちの顧客は keytool コマンドを使用するほど技術に精通しておらず、脆弱なソリューション (Mac と PC の個別の実装、Vista の実行制限との闘い、インストールする正しい JRE を見つけるのに苦労) のように思うので、スクリプトを作成したくありません。など)。

keytool は内部で Java を使用していると思います。keytool の機能を複製し、ルート証明書をプログラムでインストールするには、Java 内でどのコマンドを使用できますか?

4

6 に答える 6

2

それが可能かどうかはわかりませんが、独自の TrustManager を実装して、この接続またはこの CA を許可することができます。ここに基本があります。

于 2009-10-30T15:48:43.470 に答える
1

デスクトップ マシン上の信頼されたルートのキーストアに証明書をインストールする場合は、そのためのアクセス許可が必要です。keytoolと同じです。信頼されたルートのキーストアにアクセスするにはパスワードが必要です。クイックアンドダーティになりたい場合は、次のことができます

  • 証明書をファイルまたはバイトストリームなどに書き込みます
  • KeyToolクラスを使用してインポート( sun.security.tools.KeyTool)

ただし、証明書が有効でない場合、私見は信頼できません。それにはちゃんとした理由があると言えます。

于 2009-10-30T15:48:55.403 に答える
1

私見ですが、Sun は API 経由で keytool を公開していません。これは主に、開発者が信頼できる CA のセットを変更できないようにするためです。攻撃者がそのようなコードを悪用して独自のルート証明書をトラスト ストアに挿入し、トラスト ストアのモデルそのものを危険にさらすことは想像に難くありません。

実際、KeyTool クラス (sun.security.tools パッケージ) のソースを見ると、これは最終的なものであるだけでなく、呼び出し元がコードから KeyTool クラスのインスタンスを作成することを防止するプライベート コンストラクターも含まれています。KeyTool には main メソッドがあり、コマンドライン (したがって OS ユーザー) を初期化して KeyTool と通信できる唯一の方法になる可能性があります。

残っている唯一の(単純な)アプローチは次のとおりです。

  • アプリケーションからのプロセスとして keytool を初期化し、コマンドライン引数を渡してルート CA 証明書をインストールします。これだけではまずいので、何が起こっているかをユーザーに通知することをお勧めします。
  • keytool の使用を避け、代わりにKeymanまたはKeyTool IUIを使用してルート CA をインストールする方法をユーザーに提供します。ここだけで言えば、私は後者の方が好きです。
于 2009-10-30T16:59:33.610 に答える
1

KeyTool はいつでもプロセスとして呼び出すことができますRuntime.exec(...)

于 2009-10-30T20:24:41.887 に答える
0

コマンドラインソリューション。Macでは、Javaホームは/ Library / Java/Homeです。試す:

$ sudo -i
# cd /Library/Java/Home
# keytool -import -trustcacerts -alias CAName -file CA.crt -keystore lib/security/cacerts

CANameをCAの名前に置き換え、CA.crtを証明書ファイルへのパスに置き換えます(PEMは機能します)。キーストアのパスワードの入力を求められます。デフォルトのパスワードは、リンクされた記事に記載されています。

RapidSSLのCA証明書の1つに対してこれを行う必要がありました。

于 2012-10-10T20:20:32.700 に答える