home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Java/セキュリティ機能の公式ガイドメモ

Java/セキュリティ機能の公式ガイドメモ

Java / セキュリティ機能の公式ガイドメモ
id: 1433 所有者: msakamoto-sf    作成日: 2018-01-28 20:49:42
カテゴリ: Java 

Javaの「セキュリティ機能」は複数の異なる領域をカバーしている。そのため、ドキュメントの迷子にならないよう、ざっくり整理した。
(2018-01時点のJava8ドキュメントをベースに整理した)

Oracle Java 開発者ガイドからの入り口

Javaのセキュリティ機能の分類

一口に「セキュリティ機能」といっても、暗号化, PKI, SSL/TLS という「いかにも」な機能から、認証機能、アクセス制御、XML署名というニッチな機能もカバーしている。

概要ドキュメントをベースにしつつ、歴史的な経緯や正確性を無視してざっくり3分野に分けた。

1. 暗号技術をベースとした機能群

JCA : Java Cryptography Architecture, 暗号技術の各種アルゴリズム実装を提供する共通基盤アーキテクチャで、以下のような機能を提供している。

  • MessageDigestアルゴリズム
  • デジタル署名アルゴリズム
  • 対称鍵暗号(ブロック/ストリーム暗号)
  • 非対称鍵暗号(公開鍵暗号)
  • パスワードベース暗号化(Password-based Encryption)
  • 楕円鍵暗号(Elliptic Curve Cryptography)
  • 鍵合意アルゴリズム(Diffie-Hellman等で使う)
  • Key Generator
  • メッセージ認証コード(MAC : Message Authentication Code, HMAC : Hashed MAC)
  • 乱数生成器, 擬似乱数生成器(PRNG : Pseudo Random Number Generator)

JCAをベースとしたセキュリティ機能としては、PKI, 通信経路のセキュリティ, XML署名を提供している。

公式ガイド:

PKI : 公開鍵インフラストラクチャ

暗号技術のうち、公開鍵暗号とデジタル署名をメインとした応用技術。
鍵および証明書ストレージ, PKI用コマンドラインツール(keytool, jarsigner)を提供している。

公式ガイド:

通信経路のセキュリティ

暗号技術を活用した通信経路(プロトコル)のセキュリティを実現する。

公式ガイド:

XML署名

XML署名の生成・検証用APIが提供されている。
公式ガイド:

  • Oracle 公式開発ガイドからは、セキュリティトップから「XMLデジタル署名」,"XML Digital Signature" を参照のこと。

2. アクセス制御

どこからロードされたJavaクラスか、署名データなどを元に、JavaのAPI呼び出しやファイルアクセスなどに対するアクセス制御を実現する。
例としてはJava Appletやプラグインアーキテクチャがある。こうした「信頼できないコード」に対して、 `System.exit()` を始めとした「危険な」(= 信頼できないコードをホストする実行環境から見た場合に、実行・アクセスしてほしくないリソース・機能へのアクセス) API呼び出しを制限するような場合に活用する。
"SecurityManager", "Permission"という単語が出てくると大体この分野の話。

公式ガイド:

  • Oracle 公式開発ガイドからは、セキュリティトップから「ポリシー」(Policy)関連のトピックを参照のこと。

3. 認証機能(JAAS : Java Authentication and Authorization Service)

Kerberos, スマートカード, LDPA/NIS, PKCS11 などによるユーザの認証(Authentication)・承認(Authorization)フレームワークを提供する。
アクセス制御の中で、アプリケーションが認証したユーザに基づくアクセス制御(承認)を実現したい場合に活用する(らしい)。

公式ガイド:

  • Oracle 公式開発ガイドからは、セキュリティトップから「Java Authentication and Authorization Service (JAAS)」関連のトピックを参照のこと。

Provider方式とプロバイダ名のメモ

感想

以下は筆者の感想。

  • Webアプリケーションのサーバサイド開発でJavaを用いる場合は、主にJCA, SSL/TLS, PKI関連技術が用いられることになるだろう。
    • とはいっても、HTTPSの設定はApache/nginxなどリバースプロキシか、やってもTomcatなどのアプリケーションサーバ側の設定でカバーする場合が多くなり、これらの詳細な知識が求められる場面は少なくなってきたかもしれない。
    • 非常に古いJavaや、非常に古いシステムと通信する際に、手動でカスタマイズが必要となったりする。
    • SOAPなどXML通信を扱う場合はXML署名を使うこともありそう。
  • 今では滅多にJava Appletで開発することが無くなった。アクセス制御や認証機能などは今はどんな領域で使われているのだろうか?
    • JenkinsやCMSのように、不特定多数の人間が信頼できないプラグインをロードしたり、JavaScriptのJava実装(Nashorn)やGroovyなどの動的JVMスクリプト言語を動かす場合のSandbox環境の構築で使われているのは確か。
    • ユーザが任意のコードを動かすデスクトップアプリケーションにおいては、Javaのアクセス制御機能で何を守るのかから考える必要がありそう。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2018-01-28 20:50:17
md5:95479cc0be9fe60b21dbe9b7a52cb18e
sha1:4a6a6cb457122397d8a07db8a934f5ca36a1b9a4
コメント
コメントを投稿するにはログインして下さい。