keytoolコマンドラインユーティリティを使用せずに新しいJava CA証明書をインポートするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1650596

  •  22-07-2019
  •  | 
  •  

質問

エグゼクティブサマリー: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を使用していると思います。 Java内でkeytoolの機能を複製し、ルート証明書をプログラムでインストールするためにどのコマンドを使用できますか?

役に立ちましたか?

解決

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

他のヒント

IMHO、Sunは、主に開発者が信頼できるCAのセットを変更できないようにするために、APIを介してkeytoolを公開していません。攻撃者がこのようなコードを悪用して独自のルート証明書をトラストストアに挿入し、トラストストアのまさにモデルを侵害することを非常に想像できます。

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

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

常にKeyToolをプロセス Runtime.exec(...)として呼び出すことができます。

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

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

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

コマンドラインソリューション。 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つに対してこれを行わなければなりませんでした。

サンはこのコードを公開して、任意の証明書でhttpsを実行しているターゲットホストに基づいてcacertsファイルの更新バージョンを作成しました。

https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java

新しいcacertsは、現在のディレクトリでjssecacertsという名前になります。その新しいファイルをjre / lib / security / cacertsファイルにコピーするだけです。

新しいcacertsファイルのセキュリティについてコメントしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top