質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

5333閲覧

JavaがJKSで独自に証明書管理をするのはなぜでしょうか?

jimyo

総合スコア243

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/11/19 01:53

Javaがコンピュータにインストールされている証明書ではなく独自にJKSというデータベース形式で鍵情報を保存しているのはなぜでしょうか?

正直開発していて不便に思ったことしかありません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

JKSが扱うキーストアについては、利用される環境やOSのキーストアの情報は一切引きつかずに独立して利用できることがメリットで。キーストアはファイルごと配布が可能です。
JavaVMが信用していないCA証明証やクライアント証明書を自動的に取り込んでしまうと動作環境依存が発生しますよね。これを回避しています。

ちなみにPKCS#12はPKIのクライアント証明書を導入する仕様ですので、キーストアとは直接関係ありません。

投稿2016/11/23 11:31

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これはPKCS #12という形式のデータですね。現場で感じる不便さについてはまったく同感なのですが、このようになっているのには理由があると思います。

秘密鍵や証明書の伝達について考えてみます。秘密鍵と証明書はセットで生成されますが、それぞれが別々のデータとして (多くの場合PEMやDERの形式で) 配布されます。また、証明書に署名している認証局の証明書も別です。証明書による暗号化や認証のシステムを正しく構築・運用するためには、こうした情報をセットにしたものを安全に (盗まれたり改竄されたりせずに) 伝達することが要求されます。さらに、伝達した鍵や証明書がたしかに信頼されているということを保証できることも要求されます。

PKCS #12形式のデータには、個人情報 (秘密鍵やそれに関わる公開鍵 (証明書) など) をセットで含めることができます。また暗号化や完全性確認によって安全に情報を交換できます (これには公開鍵暗号か、パスワードによる対称鍵暗号を使います)。伝達の際に暗号化や完全性確認を行うことにより、前述の要求を満たすことができます。

簡単に言うと、PKCS #12は「だれか (ホストやサイト) によって信頼されている鍵の情報を、それが信頼されているという情報も含めて安全に受け渡す方法」であると言えます。

Javaで使っているJKS形式のキーストアも、PKCS #12形式を採用しています。これによって、インストールされた鍵や証明書が各ホストで信頼されたものであることを保証しています。また、多くのウェブブラウザで個人の証明書 (クライアント証明書) を管理する際も、よくこの形式が使われます。

以上、うまく説明できているかどうか、心許ないですが。

投稿2016/11/19 07:11

編集2016/11/19 07:17
ikedas

総合スコア4227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

CAやサーバー証明書のプラットフォームの仕様自体には暗いのですが・・・

Javaはプラットフォームの最大公約数的な機能をプラットフォームに透過的なインターフェースで提供することに注力しています。もしLinux, Machintosh, Windowsなどの代表的なプラットフォームで共通に存在している証明書のインストールメカニズムから「どのプラットフォームでも共通に提供できそうなこういう設計があるはず」と感じたならその方法をJava開発チームへ提案するという手段がとれると思います。OracleやOpenJDKの開発チームは広くそういった提案やバグレポートを受け付ける窓口を持っており例え個人でもリクエスト・レポートは可能です。

またそうした共通メカニズムが設計しにくいとしたら、特定のプラットフォーム向けに独自のライブラリーを設計することも可能かも知れません。そういったものを探したり作成したりすることで開発効率を上げることも方法の一つだと思います。

投稿2016/11/19 07:11

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問