Javaがコンピュータにインストールされている証明書ではなく独自にJKSというデータベース形式で鍵情報を保存しているのはなぜでしょうか?
正直開発していて不便に思ったことしかありません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
JKSが扱うキーストアについては、利用される環境やOSのキーストアの情報は一切引きつかずに独立して利用できることがメリットで。キーストアはファイルごと配布が可能です。
JavaVMが信用していないCA証明証やクライアント証明書を自動的に取り込んでしまうと動作環境依存が発生しますよね。これを回避しています。
ちなみにPKCS#12はPKIのクライアント証明書を導入する仕様ですので、キーストアとは直接関係ありません。
投稿2016/11/23 11:31
総合スコア12011
0
これはPKCS #12という形式のデータですね。現場で感じる不便さについてはまったく同感なのですが、このようになっているのには理由があると思います。
秘密鍵や証明書の伝達について考えてみます。秘密鍵と証明書はセットで生成されますが、それぞれが別々のデータとして (多くの場合PEMやDERの形式で) 配布されます。また、証明書に署名している認証局の証明書も別です。証明書による暗号化や認証のシステムを正しく構築・運用するためには、こうした情報をセットにしたものを安全に (盗まれたり改竄されたりせずに) 伝達することが要求されます。さらに、伝達した鍵や証明書がたしかに信頼されているということを保証できることも要求されます。
PKCS #12形式のデータには、個人情報 (秘密鍵やそれに関わる公開鍵 (証明書) など) をセットで含めることができます。また暗号化や完全性確認によって安全に情報を交換できます (これには公開鍵暗号か、パスワードによる対称鍵暗号を使います)。伝達の際に暗号化や完全性確認を行うことにより、前述の要求を満たすことができます。
簡単に言うと、PKCS #12は「だれか (ホストやサイト) によって信頼されている鍵の情報を、それが信頼されているという情報も含めて安全に受け渡す方法」であると言えます。
Javaで使っているJKS形式のキーストアも、PKCS #12形式を採用しています。これによって、インストールされた鍵や証明書が各ホストで信頼されたものであることを保証しています。また、多くのウェブブラウザで個人の証明書 (クライアント証明書) を管理する際も、よくこの形式が使われます。
以上、うまく説明できているかどうか、心許ないですが。
投稿2016/11/19 07:11
編集2016/11/19 07:17総合スコア4227
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
CAやサーバー証明書のプラットフォームの仕様自体には暗いのですが・・・
Javaはプラットフォームの最大公約数的な機能をプラットフォームに透過的なインターフェースで提供することに注力しています。もしLinux, Machintosh, Windowsなどの代表的なプラットフォームで共通に存在している証明書のインストールメカニズムから「どのプラットフォームでも共通に提供できそうなこういう設計があるはず」と感じたならその方法をJava開発チームへ提案するという手段がとれると思います。OracleやOpenJDKの開発チームは広くそういった提案やバグレポートを受け付ける窓口を持っており例え個人でもリクエスト・レポートは可能です。
またそうした共通メカニズムが設計しにくいとしたら、特定のプラットフォーム向けに独自のライブラリーを設計することも可能かも知れません。そういったものを探したり作成したりすることで開発効率を上げることも方法の一つだと思います。
投稿2016/11/19 07:11
総合スコア18392
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。